Hallo zusammen!
Ich habe ein Quell-Arbeitsblatt mit einer großen Menge an Daten (ca. 2000 Spalten und 300 Reihen). Ich benötige nur gewisse Spalten, daher lösche ich die dazwischenliegenden Spalten über:
myWS.Columns[neededColumn +1].Delete();
Anschließend manipuliere ich die Werte in manchen Spalten. Das löse ich im Moment über eine for-Schleife:
for (i = 2; i < iLastLine; i++)
{
myWS.Cells[i, column] = myWS.Cells[i, column-1] * 100;
}
Das funktioniert so natürlich, ist aber furchtbar langsam. Im Moment benötigt diese Formatierung der Quell-Datei ca. 18 Minuten, und da habe ich mich gefragt, ob man das auch effektiver lösen kann.
Das kann ja nun wirklich nicht der effektivste Weg sein...
Wenn mir jemand einen Tipp, irgendein Schlagwort geben kann, dann suche ich selbst weiter.
Vielen Dank schon mal,
lg
_fabi
Hallo __fabi
Anstatt Excel zu automatisieren kannst du direkt auf das XML des Office Dokuments zugreifen via OPEN XML.
Dies ist zwar nicht ganz so "konfortabel" aber dürfte enorm viel schneller sein.
Es gibt auch C# Libs welche das Arbeiten mit Open XML erleichtern... ( z.B. GemBox Document )
Beste Grüsse
Diräkt
Edit:
=> Ein weiterer Vorteil ist natürlich die Unabhängigkeit ein Office installiert haben zu müssen....
Die Bearbeitung auf XML Basis ist eine gute Option wenn du nicht unter Excel 2007 gehen musst und dein Programm kein Addin ist. Dann lohnt es sich das OpenXML SDK von Microsoft zu besorgen und Bearbeitung auf Dateibasis ganz ohne Excel direkt zu erledigen. Es gibt wie schon erwähnt auch gute Komponenten die das nochmal vereinfachen. Mein Vorposter hat allerdings eine kommerzielle Variante verlinkt und ich denke eine kostenfreie tuts auch so wie diese sehr gute hier ClosedXML
Falls das aus irgendwelchen Gründen nicht geht, bestehen schon noch Möglichkeiten die Performance zu verbessern dadurch das man die Menge der Calls reduziert in dem man möglichst viele Werte als 2 dimensionales Array mit einem Schlag abholt.
hey super, vielen Dank!
Das ist genau die Art von Antwort, die ich mir erhofft hatte. Werde mir das mal genau ansehen, da ich gar nicht wusste, dass das geht.
Vielen Dank euch und schönen Abend noch,
_fabi