procedure TMainForm.ladeZeilen(excelFilename: String);
var
myExcel, Sheet: OLEVariant;
zeile, spalte, lastRow: Integer;
index: Integer;
tempStringList: TStringList;
begin
if excelFilename <> '' then
begin
try
// Create Excel-
OLE Object
myExcel := CreateOleObject('Excel.Application')
except
ShowMessage('Excel konnte nicht gestartet werden!');
exit
end;
// Excel verbergen
myExcel.Visible := false;
// Öffnen der gewählten Arbeitsmappe
myExcel.Workbooks.Open(excelFilename);
Sheet := myExcel.Workbooks[1].WorkSheets[1];
//Sheet := myExcel.Workbooks[ExtractFileName(excelFilename)].WorkSheets[1];
// die letzte nicht leere Zelle aktivieren
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
// ich muss jede Zeile einlesen und jede Zeile kann unterschiedlich viel Spalten haben
// von 1 bis lastRow eine For-Schleife durchlaufen
// lastCol pro Zeile in der Schleife ermitteln
// --> die einzelnen Zellinhalt in ein Array packen
// --> das Array (entspricht dem kompletten Inhalt einer Zeile) in eine Liste packen
lastRow := myExcel.ActiveCell.Row;
tempStringList := TStringList.Create;
for zeile := 1 to lastRow do
begin
spalte := 1;
tempStringList.Clear;
while (myExcel.Cells[zeile, spalte].Value <> '') do
begin
//SetLength(ArrOfZeilen, spalte); // Arraylänge erhöhen
//ArrOfZeilen[spalte-1] := myExcel.Cells[zeile, spalte].Value;
index := tempStringList.Add(myExcel.Cells[zeile, spalte].Value);
{ShowMessage('Zeile: ' + IntToStr(zeile) + #13#10 +
'Spalte: ' + IntToStr(spalte) + #13#10 +
'Value: ' + myExcel.Cells[zeile, spalte].Value + #13#10 +
'index in Excelzeile: ' + IntToStr(index));
}
Inc(spalte);
end;
Schilder.Add(tempStringList);
Caption := IntToStr(Schilder.Count);
end;
// Quit Excel
if not VarIsEmpty(myExcel) then
begin
myExcel.DisplayAlerts := False;
myExcel.Quit;
myExcel := Unassigned;
Sheet := Unassigned;
end ;
tempStringList.Free
end;
end;