Hallo Peter,
Zitat von
peschai:
... Wäre die ursprüngliche Fehlermeldung eventuell nicht aufgetreten ...
der Zugriff über Text ist äquivalent zu AsString, solange kein event handler für OnGetText() bereit gestellt wird.
Ich habe ein wenig getestet und festgestellt, dass der Treiber einem fast die ganze Arbeit abnimmt:
Delphi-Quellcode:
procedure ReadCells(grid: TStringGrid; xlData: TDataSet);
var
i: Integer;
begin
with xlData do
while not Eof do
begin
for i := 0 to Pred(xlData.FieldCount) do
grid.Cells[i, Pred(RecNo)] := Fields[i].AsString;
Next;
end;
end;
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
DataSource.DataSet := ADODataSet;
ADODataSet.Connection := ADOConnection;
ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="test.xls";'
+ 'Extended Properties="Excel 8.0;HDR=Yes";Persist Security Info=False';
ADOConnection.LoginPrompt := False;
ADODataSet.CommandType := cmdTable;
ADODataSet.CommandText := '[data$]'; // Worksheet: data
ADODataSet.Open;
StringGrid.RowCount := ADODataSet.RecordCount;
StringGrid.ColCount := ADODataSet.FieldCount;
ReadCells(StringGrid, ADODataSet);
ADOConnection.Close;
end;
Wenn das WorkSheet nur eine Tabelle enthält, dann war es das schon. Andernfalls kann man einfach auf das erste Auftreten einer leeren Zelle reagieren.
Freundliche Grüße