Delphi XE10. Ich muss Zeile für Zeile aus einem Excel-Arbeitsblatt als (durch Tabulatoren getrennte) Zeichenfolge lesen. Was Sie erhalten, wenn Sie 'Zeile auswählen - kopieren - einfügen im Editor' verwenden. Das Arbeitsblatt enthält Zeichenfolgen, Zahlen und Daten in verschiedenen Formaten. Was funktioniert, ist dies:Holen Sie Excel-Zeile als TXT-Zeichenfolge
function TexcelSource.nextRow: string;
var k : integer;
begin
result:=sheet.cells.items[currentRow,1].text;
for k:=2 to maxCol do
result:=result+tab+sheet.cells.items[currentRow,k].text;
inc(currentRow)
end;
wo Blatt ist der Verweis auf ein Excel-Arbeitsblatt (var Variant):
XLApp:=createOLEobject('excel.application');
XLApp.Workbooks.open(filename) ;
Sheet:=XLApp.WorkSheets[1] ;
MaxRow:=Sheet.Usedrange.EntireRow.count ;
MaxCol:=sheet.Usedrange.EntireColumn.count;
Allerdings ist es inakzeptabel langsam. Ich habe versucht, in einem Schritt das ganze Blatt als ein Array zu importieren und aus dem Array lesen:
sheetData:=Sheet.UsedRange.Value;
Das ist schnell genug, aber ich kann nicht alle sheetData [Zeile, Spalte] als String Wert. Sie gibt Zellen mit Zeichenfolgenwert zurück, stoppt jedoch bei einer Zelle mit einem ganzzahligen Wert mit dem Fehler 'Konnte Variante des Typs (UnicodeString) nicht in Typ (Double) konvertieren'. (VarType dieses Elements scheint vtPointer zu sein - was ich nicht verstehe; auch verstehe ich den Fehler nicht.)
Ich habe auch versucht, Kopieren und Einfügen über die Delphi-Zwischenablage. Funktioniert für eine Weile und dann ist die Zwischenablage nicht mehr verfügbar. Wie auch immer, das ist kein Ansatz, den ich für ein funktionierendes System mag.
Ich würde Vorschläge zum Lesen einer Arbeitsblattzeile als Zeichenfolge mit akzeptabler Leistung begrüßen.
Welche Excel-Version? – MartynA
Es gibt keine XE10, FWIW –