Hallo,
ich lade aktuell eine externe Excel Tabelle, greife auf das Tabellenlatt "Internet" zu und hole dann mit Directcast die Werte die ich haben möchte wenn vorhanden.
Funktioniert soweit auch.
Normalerweise lese ich .csv Daten ein und zerlege die so (Option Strict ON):
Die Verarbeitung von "AlleZeilen" ist dann sehr shnell, ich splitte die einzelnen Elemente anhand des Trenners der csv Datei und hab dann direkt schnellen Zugriff auf alle Elmente einer Tabellenzeile.
Nun das Problem:
Leider liegt die "Internet" Tabelle aber nur in einem sehr grossen makroverseuchten Excel xlsm-File vor.
Das Lade ich dann so (Option Strict ON):
Die Tabelle hat 14k+ Zeilen mit jeweils 20 benötigten Daten-Werten pro Zeile die ich einzeln mit Directcast hole derzeit.
Und diese 280k Zugriffe sind sehr langsam, die Auswertung dauert grobe 8 Minuten.
Gibt es mit Option Strict ON eine Möglichkeit, schneller auf die Tabelle und deren Inhalte zuzugreifen ?
Ich würde gerne wie bei der .csv Zeilenweise einlesen, bekomme das aber partout nicht hin.
Vielen Dank im voraus für Eure Hilfe.
Edit:
Das habe ich hierzu noch gefunden, vom Ansatz her gut. social.msdn.microsoft.com/Foru…bnet-ffnen?forum=officede
Ich bekomme es aber an 2 Stellen wegen "late binding" nicht zum Laufen
Ist schon ein crux, wenn man probiert sauber zu programmieren...
ich lade aktuell eine externe Excel Tabelle, greife auf das Tabellenlatt "Internet" zu und hole dann mit Directcast die Werte die ich haben möchte wenn vorhanden.
Funktioniert soweit auch.
Normalerweise lese ich .csv Daten ein und zerlege die so (Option Strict ON):
VB.NET-Quellcode
Die Verarbeitung von "AlleZeilen" ist dann sehr shnell, ich splitte die einzelnen Elemente anhand des Trenners der csv Datei und hab dann direkt schnellen Zugriff auf alle Elmente einer Tabellenzeile.
Nun das Problem:
Leider liegt die "Internet" Tabelle aber nur in einem sehr grossen makroverseuchten Excel xlsm-File vor.
Das Lade ich dann so (Option Strict ON):
VB.NET-Quellcode
- 'Datei laden mit ausgeschalteten Events, damit die Source-Makros nicht anspringen
- Try
- Dim objExcel As Excel.Application = CType(CreateObject("Excel.Application"), Application)
- objExcel.Visible = False
- objExcel.EnableEvents = False
- Dim oWbk As Workbook = objExcel.Workbooks.Open(DateipfadSource)
- Dim Seite As Worksheet = CType(oWbk.Worksheets("Internet"), Worksheet)
- 'Anzahl der geladenen WW-Zeilen
- Dim Anzahl As Integer = CType(Seite.Cells(Seite.Rows.Count, 1), Excel.Range).End(Excel.XlDirection.xlUp).Row
- 'Variablen Setup
- Dim Fileout As String = ""
- Dim DateiZaehler As Integer = 1
- 'Alle Zeilen in Datensätze wandeln (erste Zeile ist Headerzeile)
- For i As Integer = Anzahl To 2 Step -1
- 'Datensatz generieren
- 'Hersteller
- If DirectCast(Seite.Cells(i, 2), Excel.Range).Value IsNot Nothing Then
- Fileout = Fileout & "###" & arrGDB_WW(1, 0) & Trim(DirectCast(Seite.Cells(i, 2), Excel.Range).Value.ToString)
- End If
- Next
- Catch ex As Exception
- MsgBox("Abbruch: " & DateipfadSource & " lässt sich nicht öffnen oder Fehler beim Auswerten der Daten." & vbCrLf & ex.ToString)
- Exit Sub
- End Try
Die Tabelle hat 14k+ Zeilen mit jeweils 20 benötigten Daten-Werten pro Zeile die ich einzeln mit Directcast hole derzeit.
Und diese 280k Zugriffe sind sehr langsam, die Auswertung dauert grobe 8 Minuten.
Gibt es mit Option Strict ON eine Möglichkeit, schneller auf die Tabelle und deren Inhalte zuzugreifen ?
Ich würde gerne wie bei der .csv Zeilenweise einlesen, bekomme das aber partout nicht hin.
Vielen Dank im voraus für Eure Hilfe.
Edit:
Das habe ich hierzu noch gefunden, vom Ansatz her gut. social.msdn.microsoft.com/Foru…bnet-ffnen?forum=officede
Ich bekomme es aber an 2 Stellen wegen "late binding" nicht zum Laufen
Ist schon ein crux, wenn man probiert sauber zu programmieren...
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mabbi“ ()