Hallo zusammen,
ich habe folgendes in der Mache:
Ich möchte in etwa 400.000 Datensätze á ca. 10 Spalten untereinander in eine Excel Datei schreiben. Selbstverständlich natürlich nicht mehr als 65535 Zeilen Pro Blatt.
Mein erster Versuch: Explizites Schreiben jeder Zeile / Zelle ... habe ich nicht mal ganz zuende gebastelt, da ich für 2000 Zeilen bereits über eine Minute warten "durfte" ... ist das die normale Geschwindigkeit, wenn man von VB.net 2003 auf Excel zugreift?
Mein zweiter Versuch ist nun folgender:
Zuerst schreibe ich meine Daten in temporäre txt Dateien mit Semikolon getrennt. Wenn ich diese Dateien nun manuell in Excel öffne (als *.csv) ist kaum eine Verzögerung zu merken. Wenn ich es nun aber über VB.Net öffnen möchte (siehe Code unten) dauert es je Blatt (mit 65535 Zeilen) ca. 1 Minute ..... finde ich auch noch recht träge.
Public Sub Write_Excelfile()
Dim exl As Excel.Application
exl = CreateObject("Excel.Application")
exl.DisplayAlerts = False
exl.ScreenUpdating = False
exl.Workbooks.Add()
Dim WB As Excel.Workbook = exl.ActiveWorkbook()
Dim WS As Excel.Worksheet
For i As Integer = 1 To mtmpDateien.GetUpperBound(1)
exl.Workbooks.OpenText(Filename:=mtmpDateien(2, i), _
Origin:=Excel.XlPlatform.xlWindows, _
StartRow:=1,_
DataType:=Excel.XlTextParsingType.xlDelimited, _
TextQualifier:= _
Excel.XlTextQualifier.xlTextQualifierDoubleQuo_
te, _
ConsecutiveDelimiter:=False, TAB:=False, _
Semicolon:=True, _
Comma:=False, Space:=False, Other:=False)
exl.Workbooks(Path.GetFileName(mtmpDateien(2, _
i))).Worksheets(1).move(After:=WB.Worksheets( _
WB.Worksheets.Count))
WS = WB.Worksheets(WB.Worksheets.Count)
WS.Name = mtmpDateien(1, i)
Next
exl.DisplayAlerts = True
exl.ScreenUpdating = True
WB.SaveAs(mPath & "\" & mtmpDateien(0, mtmpDateien.GetUpperBound( _
1)))
WB.Close()
WS = Nothing
WB = Nothing
exl.Quit()
exl = Nothing
End SubHabt Ihr evtl. eine Idee, wie ich diese Menge an Daten schneller exportiert bekomme. Leider brauche ich sie in Excel, da die Routinen zur weiteren Verarbeitung bereits in Excel vorhanden sind.....
Thänks soweit!
THOMAS |