Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Diagramm in Excel erzeugen (https://www.delphipraxis.net/110582-diagramm-excel-erzeugen.html)

Hermann85 20. Mär 2008 12:02


Diagramm in Excel erzeugen
 
Hallo,

Ich habe schon alle nötigen Tabellen in Excel erzeugt, und müsste nun daraus einige Diagramme basteln. Ich habe auch schon ein Makro aufgezeichnet und versucht das danach zu programmieren, allersings funktioniert das nicht. ich hab bestimmt noch einige Fehler drinnen, doch ich finde sie nicht. Bin auch noch nicht so erfahren. hier erst mal mein code:

Delphi-Quellcode:
 
Excel.Charts.Add;
Excel.ActiveChart.ChartType := Excel.xlXYScatterLinesNoMarkers;
Excel.ActiveChart.SetSourceData := Excel.Sheets('fcd_teil.gpx1').Range('A1:H84');
Excel.Caharts.PlotBy:= Excel.xlColumns;
Excel.ActiveChart.SeriesCollection.NewSeries;
Excel.ActiveChart.SeriesCollection.NewSeries;
Excel.ActiveChart.SeriesCollection(1).XValues := '=fcd_teil.gpx1!R2C4:R83C4';
Excel.ActiveChart.SeriesCollection(1).Values := '=fcd_teil.gpx1!R2C6:R83C6';
Excel.ActiveChart.SeriesCollection(1).Name := '=""Sued""';
Excel.ActiveChart.SeriesCollection(2).XValues := '=fcd_teil.gpx1!R2C13:R83C13';
Excel.ActiveChart.SeriesCollection(2).Values := '=fcd_teil.gpx1!R2C15:R83C15';
Excel.ActiveChart.SeriesCollection(2).Name := '=""Nord""';
Excel.ActiveChart.Location :=Excel.xlLocationAsNewSheet;
Er scheint schon Probleme mit dem Typ zu haben, ich hab aber keine Ahnung, wie ich es sonst noch schreiben könnte.

Ich hoffe mir kann einer helfen.
Danke schon mal im Vorraus

lg Hermann

Hermann85 20. Mär 2008 15:24

Re: Diagramm in Excel erzeugen
 
hab es jetzt soweit hinbekommen, dass es mir schon mal ein Diagramm anzeigt, allerdings liegt gleich das nächste problem vor. mein code hat sich nicht sonderlich geändert. naja...hier isser trotzdem:

[delphi]
Excel.Charts.Add;
Excel.ActiveChart.ChartType := xlXYScatterLinesNoMarkers;
Excel.ActiveChart.SeriesCollection.NewSeries;
Excel.ActiveChart.SeriesCollection.NewSeries;
Excel.ActiveChart.SeriesCollection(1).XValues := '=fcd_teil.gpx1!R2C4:R' + IntToStr(SheetRowCount) + 'C4';
Excel.ActiveChart.SeriesCollection(1).Values := '=fcd_teil.gpx1!R2C6:R' + IntToStr(SheetRowCount) + 'C6';
Excel.ActiveChart.SeriesCollection(1).Name := '=""Reiszeit Sued""';
Excel.ActiveChart.SeriesCollection(2).XValues := '=fcd_teil.gpx1!R2C13:R' + IntToStr(SheetRowCount) + 'C13';
Excel.ActiveChart.SeriesCollection(2).Values := '=fcd_teil.gpx1!R2C15:R' + IntToStr(SheetRowCount) + 'C15';
Excel.ActiveChart.SeriesCollection(2).Name := '=""Reisezeit Nord""';
Excel.ActiveChart.Location := xlLocationAsNewSheet;

jetzt hängt er in zeile 5 fest.
Die Fehlermeldung lautet : "Die XValues-Eigenschaft des Series-Objektes kann nicht festgelegt werden "
hab mich noch bisl im netz umgschaut und herausgefunden, dass der Tabellenname in Hochkommata stehen muss. Das geht in Delphi aber nicht, da ja dadurch der String beendet wird. Hat vlt jemand ne idee, wie ich das lösen könnte??

grüße Hermann

marabu 20. Mär 2008 15:38

Re: Diagramm in Excel erzeugen
 
Hi,

das Hochkomma innerhalb eines Delphi String-Literals musst du verdoppeln.

Grüße vom marabu

Hermann85 20. Mär 2008 16:00

Re: Diagramm in Excel erzeugen
 
Hey dankeschön...war anscheinend doch nicht mein problem...es geht immer noch nicht...naja...ich mach jetzt erst mal feierabend und grübel nächste woche weiter

frohe ostern

grüße Hermann

Chemiker 29. Mär 2008 00:01

Re: Diagramm in Excel erzeugen
 
Hallo Hermann85,

bis Du mit Deinen Diagrammen weiter gekommen?

Wenn nicht, dann hilft Dir vielleicht dieser Quell-Code weiter:

Delphi-Quellcode:
unit uDiagrammMitExcel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, comobj, Excel2000;

type
  TfrmMainMenue = class(TForm)
    Tabelle: TStringGrid;
    btnExcelDiagrammZeigen: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnExcelDiagrammZeigenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Excel : Variant;
  end;

var
  frmMainMenue: TfrmMainMenue;

implementation

{$R *.dfm}

procedure TfrmMainMenue.FormCreate(Sender: TObject);
var
  zeile: integer;
  spalte: integer;
begin
  // StrinGrid-Tabelle mit Zufallszahlen füllen
  Randomize;
  Tabelle.colwidths[0] := 42;
  Tabelle.colwidths[1] := 90;
  Tabelle.colwidths[2] := 90;
  Tabelle.colwidths[3] := 90;
  Tabelle.colwidths[4] := 90;
  Tabelle.cells[1,0]  := 'Nord';
  Tabelle.cells[2,0]  := 'Süd';
  Tabelle.cells[3,0]  := 'West';
  Tabelle.cells[4,0]  := 'Ost';
  for zeile := 1 to 12 do
  begin
    Tabelle.cells[0,zeile]:= Format('%d',[2008-zeile]);
    for spalte:=1 to 5 do
    begin
      Tabelle.cells[spalte, zeile]:= Format('%d',[Random(1000)]);
    end;
  end;
end;

procedure TfrmMainMenue.btnExcelDiagrammZeigenClick(Sender: TObject);
var
  zeile: integer;
  spalte: integer;
  Diagramm1: OleVariant;

begin
  try
    Excel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel konnte nicht gestartet werden !');
    Exit;
  end;
  Excel.Workbooks.Add;
  // Daten vom StringGridTabelle nach Excel übertragen
  for zeile := 1 to 13 do
  begin
    for spalte := 1 to 5 do
    begin
      Excel.Cells[zeile, spalte].Value := Tabelle.cells[spalte-1,zeile-1];
    end;
  end;
  Excel.Visible := true;
   // Diagramm erstellen
  Diagramm1:= Excel.Charts.Add;
  Diagramm1.Activate;
  Diagramm1.ChartType:= xlColumnClustered; // Diagrammtype
  // Datenbereich
  Diagramm1.SetSourceData (Source:= Excel.WorkSheets['Tabelle1'].Range['A1:E13'],
                           PlotBy:= xlColumns);

  // Diagramm im selben Tabellenblatt wie die Datentabelle.
  Diagramm1.Location (Where:= xlLocationAsObject, Name:= 'Tabelle1');
  // Diagrammbeschriftung
  // Sicherstellen das die Titel eingeblendet sind
  // Danach die Formatierungen durchführen

  Excel.Worksheets[1].ChartObjects[1].Chart.HasTitle:= True;
  // Diagrammtitel Test
  Excel.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Characters.Text:= 'Verkaufszahlen bis 2007';
  // Diagrammtitel Schriftfarbe
  Excel.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Font.Color:= clRed;      // Delphi-Farbe
  // Diagrammtitel Untergrundfarbe
  Excel.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Interior.Color:= clAqua; // Delphi-Farbe

  Excel.Worksheets[1].ChartObjects[1].Chart.HasAxis(xlCategory):= True;

  Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlCategory).TickLabels.
                                                          Font.Color:= clRed;

  Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).HasTitle:= True;

   Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle.
   Characters.Text:= '€';
   Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle.
                                    Font.Color:= clblue;
   Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle.
                                    Font.Size:= 12;
 //  Excel.Worksheets[1].Activate;
   Excel.Worksheets[1].Cells[1,1].Activate;
   ShowMessage('Test');
   Diagramm1:= Unassigned;
   Excel.ActiveWorkBook.Saved := True;  // ohne Nachfragen
   Excel.Workbooks.Close;
   Excel.Quit;
   Excel:= Unassigned;
end;

end.
Bemerkung: In einem StringGrid in Delphi werden Zufalls-Verkaufszahlen erstellt. (damit man was zum Spielen hat). Diese Verkaufszahlen werden nach Excel übertragen und anschließend daraus ein Diagramm erstellt. Das Diagramm wird in dem gleichen Tabellenblatt wie die Verkaufszahlen erstellt. Dann sind noch einige Diagrammelemente formatiert worden. Das Thema Diagramme formatieren in Excel ist schier unerschöpflich (Makos helfen da weiter).

Bis bald Chemiker

sx2008 29. Mär 2008 00:23

Re: Diagramm in Excel erzeugen
 
Excel.ActiveChart.SeriesCollection.NewSeries liefert doch ein Objekt zurück und mit diesem muss man weiterarbeiten:
Delphi-Quellcode:
var
  serie : OleVariant;
begin
  serie := Excel.ActiveChart.SeriesCollection.NewSeries;
  serie.XValues := ....

Hermann85 31. Mär 2008 09:13

Re: Diagramm in Excel erzeugen
 
Hallo,

Ich hatte mein Diagramm dann doch noch hinbekommen...nach ewiger Sucherei hab ich herausgefunden, dass man bei der Quellangabe Z statt R und S statt C schreiben muss (da muss erst ma einer drauf kommen) naja...bei mir siehts jetz so aus :

Delphi-Quellcode:
 
Excel.Charts.Add;
Excel.ActiveChart.ChartType := xlXYScatterLinesNoMarkers;
Excel.ActiveChart.SeriesCollection(1).XValues := '=''Sued_Ost''!Z2S4:Z'+IntToStr(ZelleSued_Ost)+'S4';
Excel.ActiveChart.SeriesCollection(1).Values := '=''Sued_Ost''!Z2S6:Z'+IntToStr(ZelleSued_Ost)+'S6';
Excel.ActiveChart.SeriesCollection.NewSeries;
Excel.ActiveChart.SeriesCollection(2).XValues := '=''Nord_West''!Z2S4:Z'+IntToStr(ZelleNord_West)+'S4';
Excel.ActiveChart.SeriesCollection(2).Values := '=''Nord_West''!Z2S6:Z'+IntToStr(ZelleNord_West)+'S6';
Excel.ActiveChart.HasTitle := True;
Excel.ActiveChart.ChartTitle.Characters.Text := 'Reisezeiten';
Excel.ActiveChart.Axes(xlCategory, xlPrimary).HasTitle := True;
Excel.ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text := 'Uhrzeit';
Excel.ActiveChart.Axes(xlValue, xlPrimary).HasTitle := True;
Excel.ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text := 'Dauer in sec';
Excel.Sheets[1].Name := 'Diagramm Reisezeiten';
trotzdem danke für die hilfe

grüße Hermann

Chemiker 31. Mär 2008 22:23

Re: Diagramm in Excel erzeugen
 
Hallo Hermann85,

das Z steht für Zeile in Deutsch, R steht für Row in Englisch;
das S steht für Spalte in Deutsch, C steht für Column in Englisch;

Bis bald Chemiker

Hermann85 1. Apr 2008 08:09

Re: Diagramm in Excel erzeugen
 
Hallo Chemiker,
das hatte ich mir eigentlich schon denken können...mein problem war eher, dass ich nicht wusst, wieso man auf einmal Z und S nehmen musste.
Die ganze Zeit war R und C gefordert und auf einmal Z und S im Diagramm, obwohl auch im Makro R und C verwendet wurde.
Dafür hab ich keine wirklich logische Erklärung.
Grüße Hermann

RickHill 13. Feb 2010 12:12

Re: Diagramm in Excel erzeugen
 
Hallo Chemiker,

Die folgende Zeile wird nicht in Office Excel 2007 akseptiert.
Was ist hier falsch?


Delphi-Quellcode:

  Excel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).HasTitle:= True;
Rick
(Dutch delphi user)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Seite 1 von 2  1 2      

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