Benutzer mit den meisten Antworten
Excel Spalte in Array schreiben, ohne durch Reihen zu iterieren

Frage
-
Hallo,
ich habe in meinem Visual Basic 2010 Projekt ein Excel Objekt geöffnet.
Wenn ich in die entsprechende Tabelle Daten einfügen möchte, geht dies sehr schnell über
objXlsSheet.Cells(2, 1).Resize(2500, 20).Value = Messen.DataArray
Wenn ich nun jedoch aus einer Spalte Werte auslesen und in ein Array schreiben möchte, muss ich über jede einzelne Zeile mit einer Schleife iterieren:
For i As Integer = 0 To 2399 Messschrieb(i) = objXlsSheet.Cells(i).Value Next
Das Code-Bsp.1 zum Daten schreiben ist sehr schnell. Das Daten Lesen, wie es im Code-Bsp.2 beschrieben ist, benötigt bei der gegebenen Datenmenge mehrere Sekunden pro Spalte. Gibt es eine Alternative, mit der ich ebenso schnell Daten aus der Excel-Tabelle lesen kann, wie ich sie im Code-Bsp.1 schreibe?
Ich habe versucht, analog zum Code-Bsp.1 vorzugehen:
Messschrieb(i) = objXlsSheet.Cells(1, 1).Resize(2500, 1).Value
Leider war dies nicht von Erfolg gekrönt, da "Messschrieb" ein Array aus Double's ist, während .Cells.[...] ein Range-Object darstellt. Ich erinnere mich leider nicht mehr an die genaue Fehlermeldung...
Könnt ihr mir helfen? Zeit ist Geld und ich würde gerne auf die resultierenden Rechenzeiten durch die vielen Schleifendurchgänge verzichten ;-)
Vielen Dank schon mal!
Gruß
- Bearbeitet Ömmes Mittwoch, 21. November 2012 17:37
- Verschoben Ionut DumaModerator Freitag, 23. November 2012 13:09 Frage nicht fur Visual Studio (aus:Visual Studio)
Antworten
-
Ja! Deine Links haben geholfen! Vielen Dank!
Mit den Imports
Imports System.Runtime.InteropServices
Imports Excel = Microsoft.Office.Interop.Excel
Imports Microsoft.Officeund folgendem Code funktioniert es:
Public Function RangeLesen(ByVal Zeile1 As Long, ByVal Spalte1 As Integer, ByVal Zeile2 As Long, ByVal Spalte2 As Integer) As System.Array Dim cellFirst As Excel.Range = TryCast(oSh.Cells(Zeile1, Spalte1), Excel.Range) Dim cellLast As Excel.Range = TryCast(oSh.Cells(Zeile2, Spalte2), Excel.Range) Dim theRange As Excel.Range = oSh.Range(cellFirst, cellLast) Return theRange.Value End Function
Dabei ist zu beachten, dass im ausgegebenen Array die Zeile"0" und Spalte"0" nicht beschrieben werden.
oSh bezeichnet ein SheetObject...
Soweit so gut... vielen Dank für deine schnelle Hilfe,
mit freundlichen Grüßen,
Raphael
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 4. Dezember 2012 09:02
-
Hallo Ömmes,
Schau dir mal folgende Links an. Vielleicht können sie Dir weiterhelfen.
VSTO Excel: Unable to read a range into an array
Fast Excel add-in. Reading and updating cells.
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 4. Dezember 2012 09:01
Alle Antworten
-
Hallo Ömmes,
Schau dir mal folgende Links an. Vielleicht können sie Dir weiterhelfen.
VSTO Excel: Unable to read a range into an array
Fast Excel add-in. Reading and updating cells.
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 4. Dezember 2012 09:01
-
Super, vielen Dank!
Ich werde die vorgeschlagenen Methoden gleich ausprobieren!
Gruß
Hallo Ömmes,
Bist Du schon zu einer Lösung gekommen?
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Ja! Deine Links haben geholfen! Vielen Dank!
Mit den Imports
Imports System.Runtime.InteropServices
Imports Excel = Microsoft.Office.Interop.Excel
Imports Microsoft.Officeund folgendem Code funktioniert es:
Public Function RangeLesen(ByVal Zeile1 As Long, ByVal Spalte1 As Integer, ByVal Zeile2 As Long, ByVal Spalte2 As Integer) As System.Array Dim cellFirst As Excel.Range = TryCast(oSh.Cells(Zeile1, Spalte1), Excel.Range) Dim cellLast As Excel.Range = TryCast(oSh.Cells(Zeile2, Spalte2), Excel.Range) Dim theRange As Excel.Range = oSh.Range(cellFirst, cellLast) Return theRange.Value End Function
Dabei ist zu beachten, dass im ausgegebenen Array die Zeile"0" und Spalte"0" nicht beschrieben werden.
oSh bezeichnet ein SheetObject...
Soweit so gut... vielen Dank für deine schnelle Hilfe,
mit freundlichen Grüßen,
Raphael
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 4. Dezember 2012 09:02