Autor Beitrag
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 17.04.06 10:26 
Ich bastel grad an einem Programm zum erstellen von KLimadiagrammen mit Hilfe von Excel. Ich hab über die Typelibs von MS Office die ganzen TExcel*-KOmponenten importiert, und schaffe es auch schon, ein Diagramm mit den im Programm eingegebenen Daten zu erstellen. Nur muss es bei einem Klimadiagramm halt so sein, dass die Werteskala für den Niederschlag an der rechten Seite steht, und die für die Temperatur links. Bei mir teilen sich beide die linke Werteskala. Wenn man in Excel manuell eine Datenreihe auf die rechte Größenachse legt (Datenreihe markieren, Eigenschaften, Reiter Achsen, Datenreihe zeichnen auf Sekundärachse, OK), wird m it dem Makrorecorder folgender Code erstellt:

ausblenden Quelltext
1:
ActiveChart.SeriesCollection(2).AxisGroup = 2					


Die Portierung nach Delphi müsste dann so aussehen:

ausblenden Delphi-Quelltext
1:
ExcelApplication1.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid).AxisGroup:=2;					

(flcid ist dabei =GetUserDefaultLCID)

Nur geht das leider nicht, da ActiveChart.SeriesCollection(bla, bla) vom Typ IDispatch ist, und folglich die Eigenschaft AxisGroup nicht kennt. Also dachte ich, dass man SeriesCollection mit dem as-Operator in ein anderes Objekt konvertieren muss. Ich schaute also in der automatisch erzeugten Unit nach, welche Objekte diese Eigenschaft, oder Get-/Set-Methoden, um sie zu verändern. Da gab es ISeries, ISeriesCollection und Axis, aber wenn ich den Code

ausblenden Delphi-Quelltext
1:
(ExcelApplication1.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid) as ISeries).AxisGroup:=2;					


ausführe, bekomme ich einen nichtssagenden "Ole-Fehler 800401A8".

Wie kann ich korrekt auf SeriesCollection zugreifen?

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Di 02.05.06 19:59 
*push*

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 02.05.06 20:06 
Hast du es

1.) mit der Zwischenspeicherung in einem Objekt also

ausblenden Delphi-Quelltext
1:
2:
serien := ExcelApplication1.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid);
serien..AxisGroup:=2;


2.) mit Später Bindung

versucht?

_________________
Markus Kinzler.
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Di 02.05.06 20:17 
user profile iconmkinzler hat folgendes geschrieben:

1.) mit der Zwischenspeicherung in einem Objekt also

ausblenden Delphi-Quelltext
1:
2:
serien := ExcelApplication1.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid);
serien..AxisGroup:=2;


Hätte ich, wenn ich wüsste, von welchem Typ serien dann sein muss

user profile iconmkinzler hat folgendes geschrieben:

2.) mit Später Bindung

Wie geht das?

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 02.05.06 20:26 
Zitat:
Hätte ich, wenn ich wüsste, von welchem Typ serien dann sein muss
ISeries

Zitat:
Wie geht das?
Späte Bindung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  excel: OleVariant;
  ...
begin
  ...
  excel := CreateOleObject( 'Excel.Application');
  ...
  excel.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid).AxisGroup:=2;

_________________
Markus Kinzler.
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mi 03.05.06 14:45 
user profile iconmkinzler hat folgendes geschrieben:
Zitat:
Hätte ich, wenn ich wüsste, von welchem Typ serien dann sein muss
ISeries

Dann krieg ich beim Casten nen Ole-Error 800401A8 in der Zeile:
ausblenden Delphi-Quelltext
1:
  Series:=ISeries(ExcelWorkbook1.ActiveChart.SeriesCollection(2,flcid));					

Wobei Series vom Typ ISeries ist.

user profile iconmkinzler hat folgendes geschrieben:

Zitat:
Wie geht das?
Späte Bindung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  excel: OleVariant;
  ...
begin
  ...
  excel := CreateOleObject( 'Excel.Application');
  ...
  excel.ActiveWorkbook.ActiveChart.SeriesCollection(2,flcid).AxisGroup:=2;

Wenn ich das genau so mache (mit ActiveWorkbook und ActiveChart) bekomme ich eine EAccessViolation beim lesen von Adresse 00000000, wenn ich das ein bisschen ändere, um das erste Workbook und das erste Chart nehme, bekomme ich (zur Laufzeit) den Fehler "ungültiger Index". Der geänderte Code:
ausblenden Delphi-Quelltext
1:
2:
excel := CreateOleObject( 'Excel.Application');
excel.Workbooks.Item[1].Charts.Item[1].SeriesCollection(2,GetUserDefaultLCID).AxisGroup:=2;

Der ungültige Index ist dabei die 1 hinter Workbooks.Item. Auch mit 0 kommt da das selbe.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 03.05.06 14:58 
In meinem Code ( und auch in deinem) fehlt die Verbindung, der dynamsischen erzeugten Klasse die Verbindung zu dem Dokument, was ich durch die ... anzeigen wollte.

_________________
Markus Kinzler.