You are not logged in.

  • Login

1

Thursday, August 25th 2011, 9:32pm

C Sharp => InterOp Excel schreiben langsam

Hallo zusammen,

Ich habe hier eine for Schleife, diese füllt Daten aus einer DataViewGrid (welche Ihre Daten aus einer Datatable zieht) einen Excel Sheet. Es geht um ca. 57 Spalten pro Datensatz und rund 4.000 Datensätze (können auch mal 20.000 sein). Das dauert bei rund 4.000 Datensätze über 10 Minuten.... das geht doch schneller, oder?

Hier das Stückchen Code, wie würdet ihr das machen um es zu beschleunigen?

C# Quellcode

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
for (int i = 0; i < MyGrid.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < MyGrid.Columns.Count; j++)
                    {
                        worksheet.Cells[i + 2, j + 1] = MyGrid.Rows[i].Cells[j].Value.ToString();
                        if(j == 6)
                        {
                           // string hlpNumber = MyGrid.Rows[i].Cells[j].Value.ToString();
                           // hlpNumber.Remove(5, 10);
                            //MessageBox.Show(MyGrid.Rows[i].Cells[j].Value.ToString());
 
                           // worksheet.Cells[i + 2, j + 1] = hlpNumber.ToString();
                        }
                    }
                }
 
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 6]).EntireColumn.NumberFormat = "0";
 
 
 
 
 
                // save the application
                workbook.SaveAs(saveFileDialog1.FileName,56, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                // Exit from the application
                app.Quit();
            }


Merci vorab,
Matthias

2

Friday, September 2nd 2011, 1:02am

Also ich hab vor nem Monat ca. mittels Qt und deren ActivX Schnittstelle in bezuf auf Excel auch versucht einige Sachen zu realieseren....
jedoch blieb mein Erfolg in grenzen, da die Performance wie bei dir ziemlich schlecht war, du arbeitest zwar mit .NET die wohl auch über ActivX "kommuniziert".

Es scheint mir so, dass die ActivX Schnittstelle einfach für dieses vorhaben nicht optimiert wurde.
Zu dem Thema findet man auch im Internet relativ gar nichts von daher habe ich alles weitere Eingestellt gehabt.

Mfg Rushh0ur

3

Friday, September 2nd 2011, 9:41am

Hi!

Ich habe es befürchtet :( Dennoch danke für dein Feedback!

Similar threads

Social bookmarks