uses comobj;
var xcl: OleVariant;
const
xlCellTypeLastCell = 11;
function spaltenname(x: integer): string;
begin
if x < 26 then result := chr(x + 65) else
result := chr(x div 26 + 64) + chr(x mod 26 + 65);
end;
procedure LastRow(Datei: string; list: TStrings);
var x, i, j: integer;
begin
list.clear;
xcl := createOleObject('Excel.Application');
xcl.Workbooks.Open(Datei);
j := xcl.Cells.SpecialCells(xlCellTypeLastCell).Row;
i := xcl.Cells.SpecialCells(xlCellTypeLastCell).Column;
for x := 1 to i do
list.add(xcl.range[spaltenname(x - 1) + inttostr(j)]);
xcl.quit;
end;
// Aufruf
procedure TForm1.Button1Click(Sender: TObject);
var Datei: string;
begin
Datei := 'C:\test.xls';
Lastrow(Datei, Listbox1.items);
end;
// Falls Absturz
procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(xcl) then xcl.quit;
end;