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 auslesen (https://www.delphipraxis.net/13873-excel-auslesen.html)

Micha 28. Dez 2003 12:49


Excel auslesen
 
Hallo zusammen,

ich möchte aus einer bestimmten Excel-Datei z. B. aus der Zelle A1 den Wert in ein Edit-Feld übernehmen lassen.

Hier im Forum habe ich schon mal etwas gefunden.
Aber ich kann es leider nicht auf mich umbauen.

Kann mir bitte wer helfen?!

Hier mal mein bisheriger Code (Ausgabe noch in ShowMessage):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
    // Excel öffnen
    lcid := GetUserDefaultLCID;

    excel := TExcelApplication.Create(Form1);
    excel.Connect;

    // Exceldatei laden (test.xls)
    wb := excel.Workbooks.Open('test.xls', emptyParam, emptyParam,    
          emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
          emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
          lcid);

    // erstes Worksheet auswählen
    ws := wb.Sheets[1] as _WorkSheet;

    ShowMessage(ws.Cells.Item[1,a].value); //Fehlermeldung "a" undefinierter Bezeichner

end;

Vielen Dank im Voraus.

kiar 28. Dez 2003 13:41

Re: Excel auslesen
 
hallo micha ,

kenn mich mit exel nicht so richtig aus, aber müsstest du nicht a als einen integer deklarieren?

oder probiere mal die 1 einzusetzen, dann müsste er dir aus dem item 1,1 den zellwert auslesen.

raik

ich sehe gerade toms ist da :P der kann dir da bestimmt helfen

Micha 28. Dez 2003 13:50

Re: Excel auslesen
 
Zitat:

oder probiere mal die 1 einzusetzen, dann müsste er dir aus dem item 1,1 den zellwert auslesen.

No, funktioniert nicht. Hab ich schon alles durchprobiert.

kiar 28. Dez 2003 14:07

Re: Excel auslesen
 
versuche mal für a:
Delphi-Quellcode:
ShowMessage(ws.Cells.Item[1,wb.activecell.column].value);
einzusetzen.

raik

Micha 28. Dez 2003 14:14

Re: Excel auslesen
 
Nein, auch nicht.

toms 28. Dez 2003 14:34

Re: Excel auslesen
 
Hi,

Probier's mal so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  WorkBk: _WorkBook; //  ein WorkBook deklarieren
  WorkSheet: _WorkSheet; //  ein WorkSheet deklarieren
  XLApp: TExcelApplication;
  _lcid: LCID;
begin
  _lcid := GetUserDefaultLCID;
  XLApp := TExcelApplication.Create(Self);
  try
    // Zum Server TExcelApplication verbinden
    XLApp.Connect;
    try
      // WorkBooks zur ExcelApplication hinzufügen
      XLApp.Workbooks.Open('c:\test.xls', emptyParam, emptyParam,
        emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
        emptyParam, emptyParam, emptyParam, emptyParam, EmptyParam,
        _lcid);
      // erstes WorkBook auswählen
      WorkBk := XLApp.WorkBooks.Item[1];
      // erstes WorkSheet definieren
      WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
      // Wer aus Zelle (1,1) anzeigen
      ShowMessage(Worksheet.Cells.Item[1, 1].Value);

      // XLApp.Visible[0] := True;
    finally
      // Server disconnecten
      XLApp.Disconnect;
    end;
  finally
    XLApp.Quit;
  end;
end;

kiar 28. Dez 2003 14:49

Re: Excel auslesen
 
@ toms

wußte ich doch :thuimb:

raik

Micha 28. Dez 2003 15:14

Re: Excel auslesen
 
Schon mal ein großes DANKE.

Aber ich erhalten nun eine Fehlermeldung (habe ich bei meinem Code beim Rumprobieren auch schon mal erhalten):

Zugriffsverletzung in Modul 'RPCRT4.DLL'

Liegt das an dieser Datei? Ist die bei mir vielleicht geschrottet?

Thanks

toms 28. Dez 2003 15:21

Re: Excel auslesen
 
Zitat:

Aber ich erhalten nun eine Fehlermeldung
Seltsam. Starte mal das System neu und probier's nochmals.

Micha 28. Dez 2003 15:23

Re: Excel auslesen
 
Hab den PC auch schon runtergefahren. - Fehlermeldung kommt immer noch.

Muss ich wohl noch n paar Tage warten. Dann kann ichs mal an nem anderen PC versuchen.

Aber wenn's bei dir klappt, dann sag ich schon mal Dankeschööön

Micha 5. Jan 2004 00:25

Re: Excel auslesen
 
Wollte bloß kurz bescheid sagen, dass es an einem anderen Rechner super klappt.

Dankeschööön.

rich123 8. Aug 2008 12:04

Re: Excel auslesen
 
Hallo,

Ich hoffe es antwortet mir noch wer auf diesen alten Post.

Und zwar verwende ich auch den Code, den toms geschrieben hat und der funktioniert auch.
Mein Problem ist es aber, dass ich nicht die Nummer der Tabelle eingeben will sondern den Tabellennamen selber. (Die Tabelle, von der ich auslese liegt bei verschiedenen exel files auf einer anderen Nummer)

Delphi-Quellcode:
      // erstes WorkSheet definieren
      WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
Danke schonmal

rich123 8. Aug 2008 12:33

Re: Excel auslesen
 
habs selber herausgefunden, wen es interessiert:

Delphi-Quellcode:
WorkSheet := Workbk.sheets['Tabelle2'] as _WorkSheet;
Gruß

p80286 8. Aug 2008 12:38

Re: Excel auslesen
 
Hallo rich123,

ich bin mir da nicht ganz sicher, aber ich denke das sollte funktionieren. Soweit ich weiß kannst Du bei VBA über Namen oder Nummern zugreifen. Nur sieht das in der Hilfe ein wenig anders aus:

Zitat:

"ActiveSheet-Eigenschaft
Wenn ein Arbeitsblatt das aktive Blatt ist, können Sie sich mit der ActiveSheet-Eigenschaft darauf beziehen. Im folgenden Beispiel wird die Activate-Methode verwendet, um Sheet1 zu aktivieren, die Seitenausrichtung auf Querformat zu setzen und das Arbeitsblatt zu drucken.

Worksheets("Sheet1").Activate
ActiveSheet.PageSetup.Orientation = xlLandscape
ActiveSheet.PrintOut


Da war ich etwas langsam, dann noch eine Empfehlung hinterher:
nach Möglichkeit immer ein "activ..." definieren, da is die Chance sich zu verdaddeln nicht so groß, weil alle Zugriffe auf "activ...." erfolgen.

Gruß
K-H

rich123 12. Aug 2008 16:28

Re: Excel auslesen
 
Hallo zusammen,

Nochmals will ich was zu dem Code erfragen.

Delphi-Quellcode:
ShowMessage(Worksheet.Cells.Item[1, 1].Value);
Wäre es auch möglich statt der Zelle 1,1 einfach 1,B oder so anzugeben? (Also die Spaltenbezeichnung wie bei Excel)
Gibt es die Funtkion schon vorgefertigt oder müsste man sich die selber ausprogrammieren?

Danke für die Hilfe

Gruß

toms 12. Aug 2008 19:20

Re: Excel auslesen
 
Zitat:

Zitat von rich123
Wäre es auch möglich statt der Zelle 1,1 einfach 1,B oder so anzugeben? (Also die Spaltenbezeichnung wie bei Excel)

Ja, mit _WorkSheet.Range:

z.B
Delphi-Quellcode:
Worksheet.Range['B53','B53'].Value

Chemiker 12. Aug 2008 19:56

Re: Excel auslesen
 
Hallo,

ich würde nur statt ‚Value’ ‚Value2’ vorziehen, um Probleme mit deutschen Datumsformaten zu vermeiden.

Bis bald Chemiker

omata 12. Aug 2008 20:11

Re: Excel auslesen
 
Hier mal eine Skizze wie das geht...

Delphi-Quellcode:
Application:TExcelApplication;

var ActiveSheet:_WorkSheet;
 
ActiveSheet:=Application.ActiveSheet as _WorkSheet;

var Sheet:variant;
var Zelle, Value:string;

Sheet:=ActiveSheet;
Zelle:='A1';
Value:='Hello World';
Sheet.Range[Zelle].Value:=Value;

Chemiker 12. Aug 2008 20:38

Re: Excel auslesen
 
Hallo omata,

das dürfte aber nicht funktionieren, weil Range in Delphi im Gegensatz zu Excel 2 Parameter erwartet.

So müsste es gehen.
Delphi-Quellcode:
Sheet.Range[Zelle, EmptyParam].Value:=Value;
Oder direkt

Delphi-Quellcode:
Sheet.Range['A1',EmptyParam].Value:=Value;
Bis bald Chemiker

omata 12. Aug 2008 20:47

Re: Excel auslesen
 
Zitat:

Zitat von Chemiker
das dürfte aber nicht funktionieren, weil Range in Delphi im Gegensatz zu Excel 2 Parameter erwartet.

Meine Skizze ist aus einer eigenen Excelklasse, die auch so schon jahrelang funktioniert. Aber wenn du meinst...

Chemiker 12. Aug 2008 21:28

Re: Excel auslesen
 
Hallo omata,

Zitat:

Zitat von omata
Meine Skizze ist aus einer eigenen Excelklasse, die auch so schon jahrelang funktioniert. Aber wenn du meinst...

Ich habe dazu keine Meinung, sondern das ist mein Kenntnisstand, bin aber jederzeit bereit was Neues dazuzulernen. Ich stütze meine Aussage auf der Unit ExcelXP, wo Range so deklariert wird und nicht überladen ist.

Delphi-Quellcode:
property Range[Cell1: OleVariant; Cell2: OleVariant]: ExcelRange read Get_Range;
Ich habe zurzeit kein Excel auf dem Rechner, deshalb kann ich Deine Variante nicht ausprobieren.

Bis bald Chemiker

Borschti 20. Okt 2009 15:40

Re: Excel auslesen
 
Hi,

sorry das ich diesen alten Thread ausgrabe aber ich wollte nicht extra einen neuen für das Thema aufmachen. Ich wollte mal fragen was es mit der lcid auf sich hat und wofür sie als letzten Parameter in

Delphi-Quellcode:
      XLApp.Workbooks.Open('c:\test.xls', emptyParam, emptyParam,
        emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
        emptyParam, emptyParam, emptyParam, emptyParam, EmptyParam,
        _lcid);
brauche?

Wenn ich die Variable wie Toms mit dem Typ LCID deklarieren will bekomme ich eine Fehlermeldung. Welche Klasse muss ich da einbinden?

Danke für eure Antworten :)

lg Alex

Chemiker 21. Okt 2009 06:49

Re: Excel auslesen
 
Hallo Borschi,

welche Excel-Version hast Du installiert? Wookbooks.Open ist die Parameteranzahl von Version zu Version verschieden. Das kannst Du überprüfen, indem Du VBA in Excel aufrufst und Dir die Parameter von Workbooks.Open ansiehst.

Bis bald Chemiker

Borschti 26. Okt 2009 07:41

Re: Excel auslesen
 
Hi,

ich habe Office 2003 installiert. Wie rufe ich denn VBA denn in Excel auf? Und was ist das eigentlich?

VG Alex

mkinzler 26. Okt 2009 07:43

Re: Excel auslesen
 
VBA: Visual Basic for Applications.

Wird für Makros verwendet

GHorn 26. Okt 2009 12:19

Re: Excel auslesen
 
In Excel:

Extras -> Makro -> VB Editor

oder direkt über Alt+F11.


Gerald


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.

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