Hallo,
Ich will Daten aus einer Excel-Datei einlesen.
Das sollte eigentlich über den Excel-ODBC funktionieren.
Leider bekomme ich aber keinen Zugriff auf die Datei.
Hat jemand so etwas schon zu Laufen gebracht?
Habe das spasseshalber mal ausprobiert über ADO/ODBC. Die Namen der „Tabellen“ (Sheets) hangen aber von der Sprache des XLSs bzw. erstellenden Excel-Programms ab. Musst als Provider einfach „Excel 8.0“ angeben
Hallo,
Ich will Daten aus einer Excel-Datei einlesen.
Das sollte eigentlich über den Excel-ODBC funktionieren.
Leider bekomme ich aber keinen Zugriff auf die Datei.
Hat jemand so etwas schon zu Laufen gebracht?
Hallo,
eine andere Möglichkeit des Zugriffs ist über OLE(=Object Linking Embedding) möglich. Dann kannst noch mehr machen mit Excel als nur die Daten aus der Tebelle zu lesen. Darüber kannst Du Excel vollkommen fernsteuern.
Schau Dir doch dazu das folgende Beispiel an:
http://www.swissdelphicenter.ch/de/showcode.php?id=156
Daten aus Excel-Datei lesen: So funktioniert’s
Da ich mit Delphi 5 Professional arbeite, war die Einbindung von ADO etwas mühsam aber ich habe das Programm jetzt zum Laufen gebracht, Vielen Dank
unit Unit1;
// Siehe auch http://support.microsoft.com/default.aspx?scid=kb;EN…
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleServer, StdCtrls, ComObj, ADODB_TLB, Grids;
type
TForm1 = class(TForm)
Button2: TButton;
StringGrid1: TStringGrid;
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var FConnection: _Connection;
FRecordset: _Recordset;
procedure TForm1.Button2Click(Sender: TObject);
var Col,Row:integer;
begin
FConnection := CoConnection.Create;
FConnection.Open(‚Data Source=C:\Mappe1.xls;‘+
‚Provider=Microsoft.Jet.OLEDB.4.0;‘+
‚Extended Properties=„Excel 8.0;HDR=NO;IMEX=1“‘,
‚admin‘, ‚‘, -1);
FRecordset := CoRecordset.Create;
FRecordset.Open(‚SELECT * FROM [Tabelle1$]‘,
FConnection, adOpenKeyset, adLockOptimistic, adCmdText);
StringGrid1.ColCount:=FRecordset.Fields.Count+1;
Row:=0;
FRecordSet.MoveFirst;
repeat
inc(row);
StringGrid1.RowCount:=Row+1;
for Col:=1 to StringGrid1.ColCount-1 do
begin
StringGrid1.Cells[Col,Row]:=varToStr(FRecordset.Fields[Col-1].value);
end;
FRecordSet.MoveNext;
until FRecordSet.EOF;
FRecordset.close;
FConnection.Cancel;
end;
end.
Hallo,
Den OLE-Zugriff auf Excel habe ich schon realisiert. Das Problem dabei ist, dass dabei jedesmal Excel gestartet wird um die daten zu lesen. und da ich mehrere große Tabellen einlesen muss hoffe ich, dass der Zugriff über ADO schneller ist.
Vielen Dank, Joachim