![]() |
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:
Er scheint schon Probleme mit dem Typ zu haben, ich hab aber keine Ahnung, wie ich es sonst noch schreiben könnte.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; Ich hoffe mir kann einer helfen. Danke schon mal im Vorraus lg Hermann |
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 |
Re: Diagramm in Excel erzeugen
Hi,
das Hochkomma innerhalb eines Delphi String-Literals musst du verdoppeln. Grüße vom marabu |
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 |
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:
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).
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. Bis bald Chemiker |
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 := .... |
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:
trotzdem danke für die hilfeExcel.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'; grüße Hermann |
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 |
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 |
Re: Diagramm in Excel erzeugen
Hallo Chemiker,
Die folgende Zeile wird nicht in Office Excel 2007 akseptiert. Was ist hier falsch?
Delphi-Quellcode:
RickExcel.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).HasTitle:= True; (Dutch delphi user) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz