![]() |
via OLE Excel auslesen - Feld ist double und nicht Variant?
Hi, ich will via OLE eine ExcelDatei auslesen. Öffnen Schließen usw geht auch tadellos. Nun will ich verschiedene Exceldateien einlesen wo die Spalten bzw Felder unterschiedlich sein können. Dazu versuche ich über die erste Zeile zu prüfen wann ein Feld leer ist (bei Listen ist das meist so).
Delphi-Quellcode:
Geht tatellos. In der Länge würde ich dann prüfen ob alle Felder leer sind, wenn ja dann ist die Exceldatei am Ende. Nun ist es aber so das meine Variable s_tmp vom Typ Variant ist, da ich dachte es nimmt alles auf. Leider muckt er bei Zahlenfeldern rum:
j:=1;
repeat if (Excel.Cells[1, j].Value<>'') then begin s_tmp:=Excel.Cells[1, j].Value; Memo1.Lines.Add('Line: '+IntToStr(j)+' - '+s_tmp); end; Inc(j); until (Excel.Cells[1, j].Value=''); Zitat:
|
Re: via OLE Excel auslesen - Feld ist double und nicht Varia
Hallo,
bist du sicher, dass der Fehler im gezeigten Code auftritt? Bei welcher Zeile? Dein Code geht durch die Zellen der ersten Zeile eines WorkSheets, überspringt einzelne Leerzellen und stoppt, wenn zwei aufeinander folgende leere Zellen gefunden werden. Willst du das wirklich? Wenn eine einzelne Leerzelle das Abbruchkriterium darstellt, dann ist eine kopfgesteuerte Schleife (while) passender:
Delphi-Quellcode:
Getippt und nicht getestet. Insbesondere den Test zum Abbruch der Schleife kann ich nicht überprüfen, da ich kein Excel installiert habe.
const
FMT = 'Line %d: %s'; var iCol: Integer; s: string; begin iCol := 1; while Sheet.Cells.Item[1, iCol].Value <> Null do begin s := Sheet.Cells.Item[1, iCol].Value; Memo.Lines.Add(Format(FMT, [iCol, s])); Inc(iCol); end; end; Ansonsten gibt es da noch Cells.SpecialCells(xlCellTypeLastCell, EmptyParam). Damit kannst du die letzte verwendete Zeile und Spalte feststellen. Grüße vom marabu |
Re: via OLE Excel auslesen - Feld ist double und nicht Varia
Zitat:
Nach langer Suche hier im Forum hab ich die Lösung gefunden mit
Delphi-Quellcode:
Die Funktion konvertiert den Wert einer Variante in einen String, egal ob Zahl oder nicht. Damit klappt es jetzt super! Aber wie ich feststellen muss ist diese "Export" Funktion nicht gerade die schnellste. Werd mir wohl dochne Komponente kaufen die das schneller und ohne installierten Excel kann. Kennt jemand die SMImportSuite von Scalabium?
s_tmp:=VarToStr( Excel.Cells[1, j].Value );
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz