Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Diagramm in Excel erzeugen

  Alt 29. Mär 2008, 00:01
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat