Autor Beitrag
Platon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Mi 25.04.07 16: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 etwas schwerer als es aussieht...

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

Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
...
    { 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;
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Platon am Mi 02.05.07 21:26, insgesamt 2-mal bearbeitet
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Mi 25.04.07 19:14 
Also am Ende soll das ganze (Diagramm 2) dann so aussehen.
Würde mich sehr freuen, wenn mir jemand da helfen kann.

@Edit
das Makro dazu sieht folgendermassen aus :

ActiveChart.SeriesCollection(1).Trenndlines.Add...

nur gibt es in TExcelApplication.ActiveChart.SeriesCollection(1,0). ????
keine Trendlines oder ähnliches ???
Einloggen, um Attachments anzusehen!
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Mi 02.05.07 21:35 
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.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Do 03.05.07 06:36 
Ähm die Unit kenne ich jetzt nicht, aber Excel ist sehr selten Base 0 und sehr oft Base 1. Das sollte man niemals vergessen. Und die SeriesCollection sollte den Namen zurückgeben, wenn du die richtige Linie triffst.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Do 03.05.07 21:13 
Ok danke erstmal für die Antwort.

Um in Delphi mit Excel zu arbeiten, sei es mit TExcelApplication oder TExcelWorkbook etc. wird bei uses "ExcelXP" eingebunden... bzw in älteren Versionen dann wohl "Excel2000"...

Mmh...das mit der Null an der Stelle scheint da schon richtig zu sein, da es (siehe Code) dort auch überall ganz supi klappt.

Das mit dem Namen weiss ich jetzt nicht. So wie ich aber das Makro verstehe (der rest war ja auch so ähnlich) müsste da "Series" rauskommen.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Fr 04.05.07 06:57 
Das mit der Unit kann gut sein, nur habe ich noch nicht mit Delphi und Excel gearbeitet, wohl kenne ich aber 80% des ExcelVBA-Codes ;)

Das hier:

SeriesCollection(1).Trenndlines.Add.

Ist aber etwas anderes als

SeriesCollection(Index,0)

Denn SeriesCollection(i) ist schon der Index und gibt ein Objekt zurück. Dein Code müsste dann eigentlich auch nur so aussehen:

ausblenden Delphi-Quelltext
1:
SeriesCollection(1).Trendlines.Add('Type:=xlLinear','Forward:=0','Backward:=0','DisplayEquation:=True','DisplayRSquared:=False')					

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Fr 04.05.07 07:50 
hmm... danke.

Ich werde das mal ausprobieren. :)
Hab auch mitbekommen, dass es SeriesCollection mit einem, mit zwei und mit keinem Parameter gibt.

Ich selber hab nun mit Excel wenig am Hut, aber schon einiges mit Delphi. Sozusagen ist das hier mein Erstlingswerk mit Excel und Delphi. :)
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Fr 04.05.07 08:09 
Ich finde es total klasse, dass du mir helfen willst, aber es funktioniert leider nicht. :(

folgendes habe ich ausprobiert :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
FExcelApplication.Charts.Add(emptyParam,emptyParam,emptyParam,emptyParam,0);
with FExcelApplication.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;
    SeriesCollection(1).Trendlines.Add(xlLinear,0,0,0,0,0,false,false,'test');
  end;


Im Anhang (screenshot) siehst du genauere Fehlermeldung.
Einloggen, um Attachments anzusehen!
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Fr 04.05.07 11:01 
Die Syntax ist aber eigentlich korrekt, versuchs sonst mal ohne Klammern für die Parameter. Damit kannst du definitv (VBA) eine Trendlinie hinzufügen:

ausblenden Quelltext
1:
ActiveChart.SeriesCollection(1).Trendlines.Add Type:=xlLinear					

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Fr 04.05.07 15:58 
In VBA ist der Code sicher i.O., aber leider in Delphi nicht. :(
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Mo 07.05.07 07:01 
Versuche doch sonst mal mit der TLB von Excel zu arbeiten.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Di 29.05.07 10:04 
Hoi ene,

danke für deine Mühen. Sorry dass ich mich jetzt erst melde. Hab noch an einem anderen Projekt gearbeitet.
Ich werd es mal mit TLB versuchen.
Aber gibt es eine Möglichkeit einen Makro in die csv zu schreiben (von Delphi aus) ?
Den könnte man ja dann ausführen...

z.B.
....BuildMakro(Makro: widestring);
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Mi 30.05.07 11:46 
Also ich hab eine Antwort gefunden auf mein Problem. Mit der Server Componente "TExcelApplication" geht es nicht, da ist wohl etwas noch nicht so ganz fertig.
Für die Trendlinie und für noch ein paar andere Kleinigkeiten benutze ich nun den Typ Variant.

(ExcelV : Variant;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
    { Graph2 zum Excelfile adden }
    FExcelApplication.Charts.Add(emptyParam,emptyParam,emptyParam,emptyParam,0);
    with FExcelApplication.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;
    { da Trendlinie nicht funktioniert... hier Variant }
    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;
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Di 05.06.07 06:42 
Die Selects solltest du lieber rausnehmen und die Objekte direkt ansprechen. Ansonsten kann das zu unangenehmen Nebeneffekten führen.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Platon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Do 07.06.07 18:13 
Stimmt. Ok. :)