Das Zauberwort für Zeilen mit Inhalt heißt in Excel "UsedRange", zudem kann man für workbook und worksheet auch variablen vergeben und leichter arbeiren:
Delphi-Quellcode:
VAR
Excel : Variant;
r,c : integer;
// reicht evtl. nicht, je nach Anzahl der Zeilen
wb,ws : Variant;
//Ist das Ole-Variant, oder sollte man da besser was anderes nehmen, weiß ich gerade nicht?
s:
STRING;
BEGIN
...
Excel := CreateOleObject('
Excel.Application');
Excel.visible := TRUE;
(* vorher FALSE *)
wb:=Excel.WorkBooks.Open('
c:\users\....\TestKreditorenRechnungen.xlsx');
ws:=wb.Worksheets['
Tabelle1'];
...
(* Es werden nur Daten gelesen *)
for r:=1
to ws.UsedRange.Rows.Count
do
for c:=1
to ws.UsedRange.Columns.Count
do
s := ws.Cells[r,c].Value;
...
ws:=unassigned;
wb.Close(false);
wb:=unassigned
//nich mehr nötig wegen dem False beim Close
//Excel.DisplayAlerts := False; (* Discard unsaved files.... *)
Excel.Quit;
Excel := unassigned;
Eine gute Hilfe ist es mMn in Excel den Makro-Rekorder anzuwerfen, das zu machen was man möchte. Dann den VBA-Code verstehen und aufräumen (der Makro-Rekorder übertreit es manchmal) und das dann in Delphi umsetzen.