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: Tabellenblatt wechseln (https://www.delphipraxis.net/85433-excel-tabellenblatt-wechseln.html)

LiS 30. Jan 2007 19:38


Excel: Tabellenblatt wechseln
 
Hallo!

Ich muss aus einer Excel-Datei Daten in mein Programm importieren. Dafür benutze ich folgende Anweisungen:

Delphi-Quellcode:
var
  Excel: OleVariant;
  i,j: integer;
begin
  try
    Excel := CreateOleObject('Excel.Application');
  except
    MessageDlg('Kein Excel installiert',mtError,[mbOk],0);
  end;
  Excel.WorkBooks.Open(Pfad);

  for i := 1 to 94 do for j := 1 to 16 do Tabelle[i,j] := Excel.ActiveSheet.Cells.Item[i+1,j].value;

  Excel.Workbooks.Close;
  Excel.Quit;
end;
Das klappt auch wunderbar, sodass alle Daten danach in dem Array of string "Tabelle" sind. Nun muss ich jedoch auch noch Daten vom 2ten Tabellenblatt der Excel-Datei holen. Wie wechsle ich denn nun das Blatt, von dem die Daten gelesen werden?

pathfinder78 30. Jan 2007 19:52

Re: Excel: Tabellenblatt wechseln
 
Delphi-Quellcode:
Excel.ActiveWorkbook.Sheets('TabelleXYZ').Activate
So aehnlich, oder mit eckigen Klammern ging das. Wenn ich etwas in Office automatiseren moechte, verwende ich den Makro-Rekorder von Excel. Der VB-Code, der dabei generiert wird, kann fast 1 zu 1 in Delphi verwendet werden. Die Hilfe im VisualBasic-Editor ist auch sehr gut.

Andidreas 30. Jan 2007 19:53

Re: Excel: Tabellenblatt wechseln
 
die verschiedenen tabelenblätter müsstest du auch über die namen ansprechen können!

^^ ok pathfinder war schneller :(

LiS 30. Jan 2007 20:09

Re: Excel: Tabellenblatt wechseln
 
Delphi-Quellcode:
Excel.ActiveWorkbook.Sheets('Kurse2').Activate;
Hab das jetzt mal ausprobiert, aber es kommt beim Laden in der Zeile dann zu einer Fehlermeldung: Mitglied nicht gefunden. Der Name der Tabelle stimmt aber auf jeden Fall!

pathfinder78 30. Jan 2007 20:16

Re: Excel: Tabellenblatt wechseln
 
Delphi-Quellcode:
Sub Makro1()
'
' Makro1 Makro
' Makro am 30.01.2007 von ... aufgezeichnet
'

'
    Sheets("Tabelle2").Select
End Sub
Der Makroeditor sagt statt .Activate .Select

LiS 30. Jan 2007 20:42

Re: Excel: Tabellenblatt wechseln
 
Ne, auch mit .select kommt die Meldung bei der Zeile.. was sind eigentlich Makros?

pathfinder78 30. Jan 2007 21:11

Re: Excel: Tabellenblatt wechseln
 
Delphi-Quellcode:
Excel.ActiveWorkbook.Sheets['Tabelle3'].Select;
So fkt es bei mir auf jeden Fall. Alternativ kannst auch der Index des Blatts angegeben werden (beginnend bei Index 1):
Delphi-Quellcode:
Excel.ActiveWorkbook.Sheets[3].Select;
Du kannst Excel auch sichtbar machen, mit folgenden Befehl:
Delphi-Quellcode:
Excel.Visible:=true;
Zu Makros:
Man kann die Befehle auch direkt in Excel aufzeichen; Excel erzeugt daraus ein VisualBasic-Skript, ein sogenanntes Makro. Gehe in Excel auf Extras -> Makro -> Aufzeichnen. Dann mache irgendetwas in Excel, z.B., aendere einen Zelleninhalt - dann druecke die Stopptaste. Gehe unter Extras -> Makro -> Makros und waehle bei dem eben aufgezeichneten Makro "Bearbeiten" aus, es oeffnet sich daraufhin der VisualBasic-Editor mit dem Quellcode. Diesen kannst Du in Delphi nach kleiner Anpassung auf Pascal verwenden. Sollte nur ein Tipp sein, wenn Du z.B. eine Grafik aus Delphi heraus erzeugen moechtest, kann man so die unterstuetzten Befehle von Excel herausfinden.

LiS 30. Jan 2007 21:38

Re: Excel: Tabellenblatt wechseln
 
Ah, sehr gut! Das mit den eckigen Klammern war's!
Dankeschön :thumb: , das hilft mir sehr viel weiter!

Thorben_K 31. Jan 2007 06:54

Re: Excel: Tabellenblatt wechseln
 
jedoch möchte ich dich drauf hin weisen das der try exepct block so nicht richtig arbeiten

Delphi-Quellcode:
var
  Excel: OleVariant;
  i,j: integer;
begin
  try
    Excel := CreateOleObject('Excel.Application');

  Excel.WorkBooks.Open(Pfad);

  for i := 1 to 94 do for j := 1 to 16 do Tabelle[i,j] := Excel.ActiveSheet.Cells.Item[i+1,j].value;

  Excel.Workbooks.Close;
  Excel.Quit;

  except  // <- hier muss der hin
    MessageDlg('Kein Excel installiert',mtError,[mbOk],0);
  end;
end;
sonnst versucht der mit dem nicht Initalisierten Object "excel zu arbeiten, was unweigerlich zu problemen führt.

altanativ ginge natürlich auch

Delphi-Quellcode:
var
  Excel: OleVariant;
  i,j: integer;
begin
  try
    Excel := CreateOleObject('Excel.Application');
  except
    MessageDlg('Kein Excel installiert',mtError,[mbOk],0);
    Exit;
  end;
  Excel.WorkBooks.Open(Pfad);

  for i := 1 to 94 do for j := 1 to 16 do Tabelle[i,j] := Excel.ActiveSheet.Cells.Item[i+1,j].value;

  Excel.Workbooks.Close;
  Excel.Quit;  
 end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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