AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Trendline in Excel automatisch hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

Trendline in Excel automatisch hinzufügen

Ein Thema von -platon- · begonnen am 2. Mai 2007 · letzter Beitrag vom 29. Mai 2007
Antwort Antwort
-platon-

Registriert seit: 2. Mai 2007
6 Beiträge
 
Delphi 2007 Professional
 
#1

Trendline in Excel automatisch hinzufügen

  Alt 2. Mai 2007, 14:22
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 ?
Angehängte Dateien
Dateityp: xls 3540_20070425_0_130.xls (30,0 KB, 6x aufgerufen)
Dateityp: xls 3540_20070425_1_180.xls (37,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
-platon-

Registriert seit: 2. Mai 2007
6 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Trendline in Excel automatisch hinzufügen

  Alt 3. Mai 2007, 22:16
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.
  Mit Zitat antworten Zitat
-platon-

Registriert seit: 2. Mai 2007
6 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Trendline in Excel automatisch hinzufügen

  Alt 23. Mai 2007, 13:19
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...
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Trendline in Excel automatisch hinzufügen

  Alt 23. Mai 2007, 21:11
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
-platon-

Registriert seit: 2. Mai 2007
6 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Trendline in Excel automatisch hinzufügen

  Alt 29. Mai 2007, 11:19
Hey Frank,

super ! Vielen Dank.

Hab vorher noch nie in Delphi mit ExcelZeugs gearbeitet. Wollte schon anfangen VB Code zu schreiben und den dann in Delphi einbauen
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.

MfG
Thomas
  Mit Zitat antworten Zitat
-platon-

Registriert seit: 2. Mai 2007
6 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Trendline in Excel automatisch hinzufügen

  Alt 29. Mai 2007, 12:51

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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 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