Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Diagrammblatt im VBA erkennen (https://www.delphipraxis.net/167427-diagrammblatt-im-vba-erkennen.html)

RWarnecke 29. Mär 2012 10:27

Diagrammblatt im VBA erkennen
 
Hallo zusammen,

ich muss in einem Delphi-Programm mehrere Exceldateien durchgehen und dort Daten auslesen. Das habe ich auch schon hinbekommen. Leider haben manche Exceldateien auch einzelne Diagrammblätter. Wenn ich diese jetzt durchgehe und solche ein Diagrammblatt auftritt kommt es zu einem Fehler, dass das aktuelle Blatt keine Tabelle sei. Wie kann im VBA abfragen, was ich für ein Blatttyp habe (Tabelle oder Diagramm) ?

Edit:
In Excel unter VBA habe ich jetzt den Blatttyp mit dem Befehl "TypeName" herausbekommen. Nur leider habe ich noch keine Ahnung wie ich den Befehl in eine Delphi-Programm einbaue, damit ich dort das gleiche Ergebnis bekomme wie unter VBA in Excel.

omata 29. Mär 2012 23:50

AW: Diagrammblatt im VBA erkennen
 
Über Workbook.Worksheets werden nur die Tabellen zurückgegeben. Über Workbook.Sheets alles.

Also so...

Delphi-Quellcode:
uses ... OleServer, Excel2000 ...;
:
:
var Excel:TExcelApplication;
    lcid, i:integer;
    Workbook:_Workbook;
    WorkSheet:OleVariant;
begin
  Excel:=TExcelApplication.Create(Self);
  try
    lcid:=GetUserDefaultLCID;
    Excel.Connect;
    Excel.Visible[lcid] := true;
    Excel.UserControl:=true;

    Workbook:=Excel.Workbooks.Open(
      'Mappe1.xls',
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam,
      lcid
    );
    for i:=1 to Workbook.Worksheets.Count do begin
      WorkSheet:=Workbook.Worksheets[i];
      Showmessage(WorkSheet.Name);
    end;
  finally
    Excel.Disconnect;
    Excel.free;
  end;
end;

RWarnecke 30. Mär 2012 07:32

AW: Diagrammblatt im VBA erkennen
 
Hallo Omata,

danke erstmal für Deine Antwort. Leider ist das noch nicht ganz, das was ich suche. Ich möchte den Typ des Tabellenblattes ermitteln, ob es jetzt eine reine Tabelle ist oder ob es ein Diagramm ist. Die Exceldatei öffne ich mit folgenden Quelltext :
Delphi-Quellcode:
  // To open excel
  try
    ExcelApp := GetActiveOleObject('Excel.Application');
  except
    try
      // If no instance of Excel is running, try to Create a new Excel Object
      ExcelApp := CreateOleObject('Excel.Application');
    except
      ShowMessage('Cannot start Excel/Excel not installed ?');
      Exit;
    end;
  end;
  ExcelApp.Workbooks.Open('Mappe1.xlsx');
Das Problem ist, dass wenn ich jetzt mit
Delphi-Quellcode:
ExcelApp.Cells[1, j].Value
auf eine Zelle zugreifen will und das aufgerufene Tabellenblatt ist ein Diagramm, dann spuckt er mir einen Ole-Fehler aus. Diesen Fehler möchte ich umgehen und vorher den Typ des Tabellenblattes ermitteln.

Jumpy 30. Mär 2012 07:57

AW: Diagrammblatt im VBA erkennen
 
ExcelApp.Cells[1, j].Value ist ja auch eine ungünstige Abkürzung, die auf das aktive Sheet im aktiven Workbook zugreift. Sauberer ist wie bei omata.

w:=ExcelApp.ActiveWorkbook
s:=w.ActiveSheet
if s.Typename = ??? then...

oder als Einzeiler:
if ExcelApp.ActiveWorkbook.ActiveSheet.Typename = ??? then ...

RWarnecke 30. Mär 2012 08:27

AW: Diagrammblatt im VBA erkennen
 
Hallo zusammen,

danke für eure Antworten. Ich habe jetzt eine Lösung gefunden und in Code-Orakel Online reingestellt. Diese Lösung reicht erstmal für meine belange.

ibp 30. Mär 2012 09:18

AW: Diagrammblatt im VBA erkennen
 
zur Info...

für den xxx.type gibt es unterschiedlich definierte Konstanten....
Code:
xlChart > Diagrammblatt
xlChart4 > Excel 4-Diagramm
xlChartShort > Excel 3-Diagramm
xlInfo > Infofenster
xlNoDocuments > keine geöffneten Dateien
xlModule > VB Modul
xlWorksheet > Tabellenblatt
xlWorksheet4 > Excel 4-Tabellenblatt
xlWorksheetShort > Excel 3-Tabellenblatt
vielleicht sind die Konstanten ja auch in OleServer, Excel2000 etc definiert


Link hier sind weitere Konstanten mit Werten

RWarnecke 30. Mär 2012 09:28

AW: Diagrammblatt im VBA erkennen
 
Hallo ibp,

danke für die Info. Werde ich noch zu dem Beitrag bei Code-Orakel hinzufügen.

Jumpy 30. Mär 2012 10:32

AW: Diagrammblatt im VBA erkennen
 
Im Code-Oracle vllt. noch

for K := 1 to ExcelApp.Sheets.Count do

ersetzen durch

for K := 1 to ExcelApp.ActiveWorkbook.Sheets.Count do


...und vllt. die Select-Zeile rauslassen, wenn nicht gerade die aktuelle Seite auch angezeigt werden soll, kostet nur performance.

RWarnecke 30. Mär 2012 10:56

AW: Diagrammblatt im VBA erkennen
 
Danke für den Hinweis. Habe es auch schon in den Beitrag von Code-Orakel eingefügt.


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