Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Trendline in Excel automatisch hinzufügen (https://www.delphipraxis.net/91259-trendline-excel-automatisch-hinzufuegen.html)

-platon- 2. Mai 2007 13:22


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:

...
{ 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 (unteren) ist der aktuelle Stand des Excelfiles...
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 ?

-platon- 3. Mai 2007 21:16

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.

-platon- 23. Mai 2007 12:19

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...

Keldorn 23. Mai 2007 20:11

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:
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;
zwecks des Makros hinzufügen: gugg mal hier:
http://www.dsdt.info/tipps/?id=605 ganz unten.

Mfg Frank

-platon- 29. Mai 2007 10:19

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

-platon- 29. Mai 2007 11:51

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 23:39 Uhr.

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