Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Chart in Excel zeichnen: XLChartType einstellen (https://www.delphipraxis.net/196565-chart-excel-zeichnen-xlcharttype-einstellen.html)

messie 31. Mai 2018 09:43

Chart in Excel zeichnen: XLChartType einstellen
 
Moin,

ich schreibe mal wieder etwas code und möchte beim Füllen eine Excel-Datei einen Chart zeichnen. Der lässt sich auch zeichnen, allerdings bekomme ich den ChartType nicht eingestellt.
Code:
var
sheet, localchart : OleVariant;

begin
  sheet := Workbook.Sheets.Add(After := Workbook.Sheets[workbook.Sheets.Count]);
  localchart := sheet.ChartObjects.Add (200,200,500,500);
  localchart.Chart.ChartWizard (sheet.Range['A5:E50'],XLChartType.xlLineMarkers); //Compiler sagt: Undeklarierter Bezeichner: XLChartType
end;
Wenn ich den Chartwizard ohne XLChartType aufrufe funktioniert es. Da bekomme ich aber ein Säulendiagramm...
Wir stelle ich denn den ChartType korrekt ein?
Delphi 2009 / Office 2013

Grüße, Messie

Chemiker 31. Mai 2018 21:04

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Hallo messie,

die Säulendiagramme sind Standard, wenn kein Diagrammtype angegeben wird.

Delphi-Quellcode:
XLChartType
ist eigentlich der Überbegriff für die Diagrammtypen-Konstanten.

Um einen bestimmten Diagrammtype zu ändern:

Delphi-Quellcode:
Gallery := xlLineMarkers


Bis bald Chemiker

Jumpy 1. Jun 2018 09:38

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Oder die Notlösung die fast immer hilft: Den Wert der Konstanten in der Excel-Hilfe nachlesen und dann in Delphi einbauen, also:

const xlLineMarkers=65;

messie 1. Jun 2018 19:00

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Zitat:

Zitat von Jumpy (Beitrag 1403604)
Oder die Notlösung die fast immer hilft: Den Wert der Konstanten in der Excel-Hilfe nachlesen und dann in Delphi einbauen, also:

const xlLineMarkers=65;

Danke, genau das war das Problem. Die Enumeration scheint nicht umgesetzt zu sein. Mit Angabe der Werte hat es erstmal geklappt.
Die andere Notlösung (Aufzeichnen und Auswerten von Makros) klappt in Bezug auf den Chartwizard nicht mehr, der wurde ja mit Excel 2007 abgeschafft.
Ich hoffe, jetzt weiterzukommen, indem ich in die erzeugte Datei Excel-Makros nachrüste.

Grüße, Messie

Chemiker 2. Jun 2018 16:44

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Hallo messie,

der Chartwizard funktioniert in Excel 2007 als auch in Excel 2016. Nicht die Konstante ist das Problem, sondern der Aufruf der Methode.

Delphi-Quellcode:
…..ChartWizard (Gallery := xlLineMarkers);


oder

Delphi-Quellcode:
…..ChartWizard (Gallery := 65);


Bis bald Chemiker

messie 3. Jun 2018 11:13

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Zitat:

Zitat von Chemiker (Beitrag 1403707)
Hallo messie,

der Chartwizard funktioniert in Excel 2007 als auch in Excel 2016. Nicht die Konstante ist das Problem, sondern der Aufruf der Methode.

Delphi-Quellcode:
…..ChartWizard (Gallery := xlLineMarkers);


oder

Delphi-Quellcode:
…..ChartWizard (Gallery := 65);


Bis bald Chemiker

Hm,

ging bei mir nicht, nur mit integer-Übergabe. Welchem Objekt ordnest Du denn den Chartwizard zu? Vielleicht habe ich da ein anderes?
Bzw. kann ich noch andere units über uses einbinden?

Grüße, Messie

Chemiker 3. Jun 2018 19:27

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Hallo messie,

ein Beispiel:


Die Daten werden zuerst in einem StringGrid eintragen, anschließend in einem Excel-Sheet übertragen. Danach werden diese Daten in einem Diagramm angezeigt.
Mit ChartWizard werden die Daten dann in einer anderen Datentype in Excel geändert.

Delphi-Quellcode:
procedure TForm1.btExcel_Dia_erstellenClick(Sender: TObject);
var
  z, s: integer;
  SG1: TStringGrid;
  vExcel: OLEVariant;
begin
  try
    SG1 := TStringGrid.Create(self);
    SG1.Parent:= self;
    SG1.Height:= 145;
    SG1.Left:= 72;
    SG1.Top:= 176;
    SG1.Width:= 145;
  // Daten in einem StrinGrid eintragen
    with SG1 Do
    begin
      Cells[0,0] := 'Umsatz';
      Cells[1,0] := 'Kosten';
      Cells[0,1] := '500';
      Cells[0,2] := '400';
      Cells[0,3] := '300';
      Cells[0,4] := '800';
      Cells[1,1] := '300';
      Cells[1,2] := '500';
      Cells[1,3] := '900';
      Cells[1,4] := '700';
    end;
  // Excel starten
  try
    vExcel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel konnte nicht gestartet werden!');
    Exit;
  end;
  vExcel.Visible := TRUE;
  vExcel.Application.Caption:= 'Demo für Diagramm Erstellung';
  vExcel.WorkBooks.Add;
  vExcel.WorkSheets[1].Name := 'Tabelle mit Daten';
  // Ab hier werden die Daten von StringGrid nach Excel exportiert.
  // Zu beachten ist das die erste Zeile/Spalte im StringGrid = 0 ist und
  // bei Excel =1
  for z := 1 to SG1.RowCount do
  begin
    for s := 1 to SG1.ColCount do
    begin
      vExcel.cells[z, s].Value2 := SG1.Cells[s-1, z-1];
    end;
  end;
  // Werte Tabelle in Excel markieren
  vExcel.ActiveWorkbook.WorkSheets['Tabelle mit Daten'].Range['A1:B5'].Select;
  // Neue Diagramm-Seite anlegen
  vExcel.Charts.Add;
  // Die Diagrammseite einen Namen geben
  vExcel.Charts[1].Name := 'Test Diagramm';
  // Diagrammtype auswählen
  vExcel.Charts[1].ChartType:= xlLineStacked;

  ShowMessage('Diagramm anzeigen');

  // Einen neuen Diagrammtype auswählen
  vExcel.Charts[1].ChartWizard (Gallery:= xlXYScatter);

  ShowMessage('Die Daten in einem anderen Diagramm anzeigen');

  vExcel.ActiveWorkbook.Saved:= TRUE;
  vExcel.ActiveWorkbook.Close;
  vExcel.Quit;
  vExcel:= Unassigned;
  finally
    SG1.Free;
  end;
end;


Bis bald Chemiker

messie 4. Jun 2018 10:59

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Hallo Chemiker,
und Danke für das Beispiel

Es erzeugt bei mir dasselbe Problem:
Zitat:

[DCC Warnung] Unit8.pas(7): W1006 Unit 'OleAuto' ist veraltet
[DCC Fehler] Unit8.pas(81): E2003 Undeklarierter Bezeichner: 'xlLineStacked'
[DCC Fehler] Unit8.pas(86): E2003 Undeklarierter Bezeichner: 'xlXYScatter'
[DCC Fataler Fehler] Project9.dpr(5): F2063 Verwendete Unit 'Unit8.pas' kann nicht compiliert werden
Wegen der Warnung habe ich nach anderen Units gefragt. Evtl. habe ich da ein Codebeispiel aus D6 genommen was nicht mehr richtig läuft.

Was ich übrigens auch nicht hinbekomme, ist beim XYScatter die erste Spalte als X und die zweite als Y zu verwenden. Der GUI-Wizard machte das meiner Meinung nach automatisch, wenn man ihm zwei Spalten anbot.

Grüße, Messie

Chemiker 4. Jun 2018 22:02

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Hallo messie,

ich habe grade die Procedure in Delphi 2006 mit Excel 2007 in Vista ausprobiert, und die Procedure funktioniert ohne Probleme.

Vielleicht liegt es daran das nicht die richtigen Unit’s eingebunden werden.
Delphi 2006 als auch Delphi Berlin:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, comobj, ExcelXP;
Bis bald Chemiker

messie 5. Jun 2018 13:39

AW: Chart in Excel zeichnen: XLChartType einstellen
 
Moin,

die ExcelXP war es. Danke!

Grüße, Messie


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