![]() |
Trendline in Excel automatisch hinzufügen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Delphi-Freunde :) !
Ich habe folgendes Probelm : Ich hab seit ein paar Wochen ein interes Programm geschrieben für meine Firma. Ansich ist auch alles sehr schön. Ich konvertiere Daten aus einem TextFile in einen TChart, dann nach dortiger Auswahl von einem Bereich konvertiere ich die sichtbaren Daten in eine CSV Datein, also in eine ExcelDatei. Dort pastele ich mit TExcelApplication. ... zwei Diagramme. Eins zeigt dann das gleiche Bild wie im TChart an. Zu dem anderen Diagramm berechne ich vorher die KonzentrationsStufen der gemessenen Werte. Da gibt es auch Ausreiser etc. ... ist nicht ganz so einfach... Aber zu meinem Problem : in dem 2. Diagramm möchte ich nun eine Trendlinie einfügen. Wie funktioniert das ? (in Excel -> rechtsklick auf die Punkte -> "tata") Hab mir auch schon ein Makro dafür aufzeichnen lassen...aber das umbauen mit Delphi ???
Delphi-Quellcode:
Im Anhang (unteren) ist der aktuelle Stand des Excelfiles...... { Graph2 zum Excelfile adden } ExcelApplication.Charts.Add(emptyParam,emptyParam,emptyParam,emptyParam,0); with ExcelApplication.ActiveChart do begin { Diagramm bearbeiten } ChartType := xlXYScatter; SetSourceData(Range2,xlColumns); Location(xlLocationAsNewSheet,'Diagramm 2'); HasTitle[0] := true; ChartTitle[0].Text := 'Linearity check '+ChartObjekt.Number+' '+FormatDateTime('yyyymmdd',now); HasAxis[xlCategory,xlPrimary,0] := true; HasAxis[xlValue,xlPrimary,0] := true; HasLegend[0] := true; Legend[0].Position := xlRight; end; Im Anhang (oberen) ist der Stand, wie es aussehen soll... Wäre echt toll wenn mir jemand weiter helfen kann. Wenn ich mir die mitgelieferte "ExcelXP.pas" so anschaue, dann feindet man schon in "Series" -> "Trendlines" usw... Aber wie kommt man mit "ExcelApplication.ActiveChart." zu "Series" ? Mit "SeriesCollection" leider nicht...zumindest ich nicht ? |
Re: Trendline in Excel automatisch hinzufügen
Ich bin ja fast der Meinung, dass da etwas mit der "ExcelXP.pas" nicht stimmt.
Sollte nicht "SeriesCollection(Index,0)" (in TExcelApplication.ActiveChart) "Series" zurückgeben ? Dann würde ja auch das Makro so in etwa funktionieren, so wie bei den anderen Sachen auch. Leider gibt aber "SeriesCollection(Index,0)" "IDispatch" zurück, was auch immer das genau ist. |
Re: Trendline in Excel automatisch hinzufügen
Weiss zufällig jemand, wie man unter Delphi ein Macro in eine Exceldatei einfügt ?
Mit "TExcelApplication.Run" könnte man diesen ja dann ausführen... |
Re: Trendline in Excel automatisch hinzufügen
Hallo,
mit den Server-Kompos habe ich es auch nicht hinbekommen. Da stimmt was nicht. Habe es auch nicht hinbekommen, das trendlines-Objekt zu bekommen, das fehlt irgendwie, ich kann nur eine einzelne Trendline aufrufen. mit der späten Bindung ginge es aber:
Delphi-Quellcode:
zwecks des Makros hinzufügen: gugg mal hier:
procedure TForm1.Button14Click(Sender: TObject);
var Excel: Variant; begin try Excel:=GetActiveOleObject('Excel.Application'); except Excel:=CreateOleObject('Excel.Application'); end; Excel.Visible := True; //blabla, Excelmappe öffnen, hier als bsp muß die Mappe schon auf sein Excel.Sheets['Diagramm 1'].Select; Excel.ActiveChart.SeriesCollection(1).Select; Excel.ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=0, Backward:=0, DisplayEquation:=False, DisplayRSquared:=False).Select; Excel := Unassigned; end; ![]() Mfg Frank |
Re: Trendline in Excel automatisch hinzufügen
Hey Frank,
super ! Vielen Dank. :cheers: Hab vorher noch nie in Delphi mit ExcelZeugs gearbeitet. Wollte schon anfangen VB Code zu schreiben und den dann in Delphi einbauen :shock: Da es wohl auch für Commerziellezwecke eingesetzt werden soll demnaechst, ist es schon wichtig, dass auch die Trendlinie entsteht. Wenn es so ähnlich funktioniert wie ich es mir jetzt so vorstelle...dann ist es gut. Probiere es gleich mal aus... Danke nochmal für den Code. :-D MfG Thomas |
Re: Trendline in Excel automatisch hinzufügen
:-D
Nochmal danke für deine Hilfe. Ich hab folgenden Code nun in meine Procedure eingebunden... und es klappt wunderbar.
Delphi-Quellcode:
procedure ...(...);
var ... ExcelV : Variant; begin ... ExcelV := GetActiveOleObject('Excel.Application'); ExcelV.Sheets['Diagramm 2'].Select; { voor jede Spalte Linie zeichnen } for i := 1 to ChartObjekt.LineList.Count-1 do begin ExcelV.ActiveChart.SeriesCollection(i).Select; ExcelV.ActiveChart.SeriesCollection(i).Trendlines.Add (Type := xlLinear, Forward := 0, Backward := 0, DisplayEquation := True, DisplayRSquared := True).Select; end; ExcelV := unassigned; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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