Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Excel fernsteuerun mit OLE: TExcelChart Objekt

  Alt 8. Nov 2009, 00:34
Hallo RoME87,

ich habe Dir mal ein minimales Beispiel zusammen geschrieben.
Das ist eigentlich nur den VBA-Macro in Delphi umgesetzt.

Die Unit comobj wird für die OLE-Automation gebraucht, die Unit ExcelXP wird eingebunden für die Konstanten von Excel (im Beispiel für xlColumnClustered)

Delphi-Quellcode:
unit MainExcel_Tabelle_Diagramm;

interface

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

type
  TForm1 = class(TForm)
    SG: TStringGrid;
    btDatenNachExcel: TButton;
    btStringGridMitDatenFuellen: TButton;
    procedure btStringGridMitDatenFuellenClick(Sender: TObject);
    procedure btDatenNachExcelClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    vEXCEL: OLEVariant;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btDatenNachExcelClick(Sender: TObject);
var
  z, s: integer;
begin
  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 sg.RowCount do
  begin
    for s := 1 to sg.ColCount do
    begin
      vExcel.cells[z, s].Value2 := SG.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;
  // Diagrammtype auswählen
  vExcel.Charts[1].ChartType:= xlColumnClustered;
  // Die Diagrammseite einen Namen geben
  vExcel.Charts[1].Name := 'Test Diagramm';
  // Aufräumen
  ShowMessage('Excel wird jetzt geschlossen');
  vExcel.ActiveWorkbook.Save;
  vExcel.Quit;
  vExcel:= Unassigned;
end;

procedure TForm1.btStringGridMitDatenFuellenClick(Sender: TObject);
begin
  with SG 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;
end;

end.

Vielleicht Hilft Dir das weiter.
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat