Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel Zugriff mit ADO (https://www.delphipraxis.net/118320-excel-zugriff-mit-ado.html)

Cogito 5. Aug 2008 10:07


Excel Zugriff mit ADO
 
Hallo zusammen,

ich habe mir hier im Forum folgenden Code zum Zugriff auf Exceldateien mittels ADO kopiert und das funktioniert zum Teil auch ganz gut. Das Problem ist nur, das ich auf die einzelnen Zellen (im Beispiel die Anweisung: "ATable.FieldValues['A1']") einfach nicht zugreifen kann, dann kommt immer "Feld A1 nicht gefunden". Kann hier jemand weiterhelfen?


Delphi-Quellcode:
var
  ACon    : TADOConnection;
  ATable  : TADOTable;
  AList   : TStringList;
  AStr    : String;
  v : Variant;
begin
   //Connection öffnen
    ACon := TADOConnection.Create(Self);
    ACon.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
        'Provider=Microsoft.Jet.OLEDB.4.0; ' +
        'Data Source=F:\Entwickler-Projekte\HSH\Database\Testmappe.xls;' +
        'Extended Properties=Excel 8.0; ' +
        'Persist Security Info=False';
    ACon.LoginPrompt := False;
    ACon.Open;

    AList := TStringList.Create;
    ACon.GetTableNames(AList);
    ShowMessage(AList.Text);
    //Table öffnen
    ATable := TADOTable.Create(Self);
    ATable.Close;
    ATable.Connection := ACon;
    AStr := Copy(AList[0], 2, Length(AList[0]) - 2);
    ATable.TableName := AList[0];
    ATable.TableDirect := True;
    ATable.Open;
    ATable.First;
    ShowMessage(IntToStr(ATable.RecordCount));
    //Table langlatschen
    while not ATable.Eof do
    begin
      v := ATable.FieldValues['A1'];
      if not VarIsNull(v) then //wert nicht leer mach string draus
      begin
        v := VarAsType(v, varString);
        ShowMessage(v);
      end;
      ATable.Next;
    end;
    FreeAndNil(ATable);
    FreeAndNil(AList);
    ACon.Close;
    FreeAndNil(ACon);

jensw_2000 5. Aug 2008 18:27

Re: Excel Zugriff mit ADO
 
Wie sieht dein XLS File aus?
Gibt es in der Arbeitsmappe in der ersten Arbeitsbereichsseite ("Tabelle") eine Spalte mit dem Namen "A1"?

Schöne Grüße,
Jens
:hi:

sx2008 6. Aug 2008 01:33

Re: Excel Zugriff mit ADO
 
Einfach statt über den Namen über den Index zugreifen:

Delphi-Quellcode:
v := ATable.Fields[0].AsString; // Spalte A
Die Feldnamen von Excel sind IMHO mit einem $-Zeichen dekoriert.
Der Name "A1" bezeichnet ja übrigens eine bestimmte Zelle, während der Feldname sich ja
auf eine bestimmte Spalte beziehen muss.
Am Besten, du beteibst etwas Forschungsarbeit:
eine Datesource + ein DBGrid auf das Formular und du siehst die richtigen Feldnamen.

Errraddicator 6. Aug 2008 06:40

Re: Excel Zugriff mit ADO
 
Warum greift Du denn nich "direkt" über OLE auf Excel zu?
Dann kannste doch praktisch 1:1 VBA programmieren wenn man so will.

mkinzler 6. Aug 2008 06:42

Re: Excel Zugriff mit ADO
 
Zugriff per ADO funktioniert auch ohne Excel und ist schneller als OLE

Errraddicator 6. Aug 2008 06:49

Re: Excel Zugriff mit ADO
 
Ah ok, grade Ersteres ist natürlich ein sehr gutes Argument.
Zweiteres kommt halt auf die Liste drauf an die man auslesen/verarbeiten möchte. :)

Cogito 6. Aug 2008 12:26

Re: Excel Zugriff mit ADO
 
Vielen Dank, der Zugriff über Fields funktioniert.
Das nächste Problem ist jetzt allerdings, das er die dritte Spalte als leer liefert???
Wenn ich die Tabelle wie empfohlen in einem Grid anzeige, sehe ich das auch.
Kennt jemand dieses Problem und kann mir hier weiterhelfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz