Autor Beitrag
qwertzio
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 28.04.11 15:02 
moin moin,

das ist glaub ich meine letzte frage für heute ^^

ich habe ein Dataset und möchte die dort abgelegten daten in eine excel datei schreiben.
habe schon von einer interop excel funktion gehört, und bin auch fleißig am suchen aber finde nix gescheites :/

könnte mir evtl einer nen link zukommen lassen der das ganze ein wenig erklärt oder sogar ein code snippet, oder wie ich am besten an die sache herangehen :)

lg

Dennis


Zuletzt bearbeitet von qwertzio am Fr 29.04.11 11:56, insgesamt 1-mal bearbeitet
IsNull
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 97
Erhaltene Danke: 11


VS 2010, C#, AHK
BeitragVerfasst: Do 28.04.11 15:21 
IMHO hast du zwei Möglichkeiten:

1. Excel InterOP, das heisst du nutzt die COM Schnittstelle von Excel -> support.microsoft.com/kb/302084/de

2. Eine einfache Möglichkeit die Daten Excel zugänglich zu machen könnte auch ein Export als CSV sein.
Deutron
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 28.04.11 15:51 
also wenn ich das so mache wie im vorgeschlagenem Microsoft Tutorial,
dann erhalt ich folgende Fehlermeldung:

" Der Name "Excel" ist im aktuellen Kontext nicht vorhanden. "

using sowie Verweise sind drin.
qwertzio Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 28.04.11 15:52 
gibt es nicht auch eine möglichkeit dass iwie über nen datatable zu machen ?

sry aber ich hab null ahnung :D

mache c sharp nun noch nicht sehr lang.

in den beispielen die ich gesehen habe muss man bei exel interop iwie die spalten und so schon vordefinieren.. das ist doch eigentlich voll doof ?
gibs nich ne einfach methode dass ihc das iwie original aus nem dataset oder datatable in eine excel schreiben kann wie bei einer XML-Datei zb ?
weil die beispiele die ich jetzt gesehen habe sind alle wer weiss wie viele 1000000 zeilen lang und das muss doch sicherlich kürzer und einfacher gehen.

mfg
IsNull
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 97
Erhaltene Danke: 11


VS 2010, C#, AHK
BeitragVerfasst: Do 28.04.11 16:09 
Zitat:
sry aber ich hab null ahnung

Keine Ahnung haben macht nichts, sollte aber nicht dazu führen, dass du selber nichts probierst.


Ich gehe mal davon aus, dass du eine gefüllte Datatable hast - davon ausgehend kannst du es quick & dirty so machen:

Dein DataTable Objekt hat ein Columns sowie ein Rows Property, durch welche du mit foreach dynamisch loopen kannst. Damit kannst du ziemlich einfach dein Excel befüllen.

Versuch dich daran, und wenn es nicht so will wie es soll, poste deinen bisherigen Code.

Edit:
Fix & fertig: msmvps.com/blogs/deb...atable-to-excel.aspx
Deutron
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 29.04.11 08:25 
Sind jetzt so weit das wir wissen das wir unser Projekt mit infragistics.excel speichern/öffnen sollen, jemand idee wie wir darüber unseren DataSet ausgeben können?

mfg
Deutron
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 29.04.11 10:34 
haben es mittlerweile gebacken bekommen den dataset in ein xls format zu bekommen mit dem kleinen stück code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
 var objWorkbook = new Workbook();
           

            foreach (DataTable table in ds.Tables)
            {
                
                Infragistics.Excel.Worksheet worksheet = objWorkbook.Worksheets.Add(table.TableName);

               
                for (int columnIndex = 0; columnIndex < table.Columns.Count; columnIndex++)
                {
                    worksheet.Rows[0].Cells[columnIndex].Value = table.Columns[columnIndex].ColumnName;
                }

                int rowIndex = 1;
                foreach (DataRow dataRow in table.Rows)
                {
                    Infragistics.Excel.WorksheetRow row = worksheet.Rows[rowIndex++];

                    for (int columnIndex = 0; columnIndex < dataRow.ItemArray.Length; columnIndex++)
                    {
                        row.Cells[columnIndex].Value = dataRow.ItemArray[columnIndex];
                    }
                }
            }





            objWorkbook.Save("C:\\...\\Excel.xls");



jetzt bereitet uns das Öffnen der file per Excel-Aufruf in der Applikation Schwierigkeiten.
Ausserdem wär noch interessant Die excel Datei über SaveFileDialog speichern zu können, das hab ich auch noch nicht hinbekommen.

mfg
ZigZag
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 30.11.11 13:12 
Hey,

es ist relativ simpel das ganze über ein SaveFileDialog abzuspeichern.
Ich hab das ganze mal ergänzt.
Es gibt bestimmt bessere Lösungen, aber so gehts.


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
       // Menue_Click zum Exportieren
       private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            
            SaveFileDialog save = new SaveFileDialog();
            // FileSave directory
            save.InitialDirectory= @"c:\MeinOrdner\Default\";
            save.Filter = "Exceldatein (*.xls)|*.xls|"
                        + "Alle Datein (*.*)|*.*";
            save.ShowDialog();  
            FileName = save.SafeFileName;
            if (FileName == "")
            { }
            else
            {
                
                // DeineTable Platzhalter für eure Table
                ExcelExporter.ExcelExport_Table(DeineTable, FileName);
            }
        }

        // ExelExport für DataTable
        public static void ExcelExport_Table(DataTable table, string fileName)
        {
         var objWorkbook = new Workbook();
                      
            Infragistics.Excel.Worksheet worksheet = objWorkbook.Worksheets.Add(table.TableName);
               
            for (int columnIndex = 0; columnIndex < table.Columns.Count; columnIndex++)
            {
                worksheet.Rows[0].Cells[columnIndex].Value = table.Columns[columnIndex].ColumnName;
                worksheet.Columns[columnIndex].Width = 5000;
            }

            int rowIndex = 1;
            foreach (DataRow dataRow in table.Rows)
            {
                Infragistics.Excel.WorksheetRow row = worksheet.Rows[rowIndex++];

                for (int columnIndex = 0; columnIndex < dataRow.ItemArray.Length; columnIndex++)
                {
                    row.Cells[columnIndex].Value = dataRow.ItemArray[columnIndex];
                }
            }
            try
            {
                objWorkbook.Save(fileName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ein Fehler ist aufgetreten");
            }
        }


Mfg =)
ZigZag