![]() |
Excel Chart positionieren
Hallo Forenmitglieder,
hänge mal wieder fest. In meiner Excel-Unit habe ich eine Funktion zum einfügen eines Diagramms geschrieben. Das Erzeugen und einfügen funktioniert, die Positionierung des Diagramms gelingt mir allerdings nicht. Ich habe mehrere Ansätze die ich so gefunden habe ausprobiert, leider ohne Erfolg. Weiß vielleicht jemand woran es liegt???
Delphi-Quellcode:
Freue mich über jede Antwort
Procedure TFormExcel.MakeChart(Daten: TChartData);
var I : integer; Bereich, B, Tabelle : string; DName, DN : string; //Namen der Datenreihen Diagramm, P,CO : OleVariant; begin //aus welchen Gründen auch immer übernimmt das Diagramm die zuvor in eine Tabelle //eingetragenen Datenreihen Diagramm := ExcelApp.ActiveWorkbook.Charts.Add; Diagramm.Activate; //Diagramm.ChartType := xlColumnClustered; //Balkendiagramm //Diagramm.ChartType := xlXYScatterLinesNoMarkers; //Liniendiagramm Diagramm.ChartType := Daten.Typ; //Übernahme der Datenbereihe zu den einzelnen Datenreihen Bereich := Daten.Datenbereich; if Bereich[length(Bereich)] <> ';' then Bereich := Bereich + ';'; //sicherstellen dass auch der letzte Eintrag ein Semikolon am Ende hat //Übernahme der Datenreihenbezeichnungen DName := Daten.Titel; if DName[length(DName)] <> ';' then DName := DName + ';'; if Daten.DatenblattNummer > 0 then //Name des Tabellenblattes ermitteln begin Tabelle := ExcelApp.ActiveWorkbook.Worksheets[Daten.DatenblattNummer].Name; end else begin //ist der Name des Tabellenblattes bekannt dann diesen direkt übernehmen Tabelle := Daten.DatenblattBezeichnung; end; for I := 1 to Daten.Datenreihen do //arbeitet alle Datenreihen ab begin B := Copy(Bereich,1,pos(';',Bereich)-1); //Bereich ohne Semikolon herausfiltern Delete(Bereich,1,pos(';',Bereich)); //ist nur ein Bereich definiert, ist B nachher leer DN := Copy(DName,1,pos(';',DName)-1); Delete(DName,1,pos(';',DName)); //da u.U. die Datenreihen bereits vorhanden sind, nur fehlende Datenreihen neu einrichten if I > Diagramm.SeriesCollection.count then Diagramm.SeriesCollection.NewSeries; //Zuweisen der Daten zur Datenreihe Diagramm.SeriesCollection(I).Values := '='+''''+Tabelle+''''+'!'+B; //Bezeichnung der Datenreihe Diagramm.SeriesCollection(I).Name := DN; end; //Das Einfügen des Diagramms in ein neues bzw. bestehendes Datenblatt darf erst //erfolgen wenn es praktisch fertig ist da es sonst bei Anweisungen in der for-Schleife //zu Fehlermeldungen kommt if Daten.NeuesBlatt then Diagramm.Location(xlLocationAsNewSheet,Daten.ChartTitel) else Diagramm.Location(xlLocationAsObject,Tabelle); //Fehlermeldung: Die Methode Left wird vom Automatisierungsobjekt nicht unterstützt //Diagramm.left := ExcelApp.ActiveWorkbook.ActiveSheet.cells[20,3]; //Diagramm.Top := ExcelApp.ActiveWorkbook.ActiveSheet.cells[20,3]; //Fehlermeldung: Mitglied nicht gefunden //Diagramm.Location.Top := ExcelApp.ActiveWorkbook.Activesheet.Rows(20).Top; //Diagramm.Location.Left := ExcelApp.ActiveWorkbook.Activesheet.columns(3).Left; //Fehlermeldung: OLI-Fehler 800A01A8 //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes(Diagramm.Name).Top := 1; //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes(Diagramm.Name).Left := 1; //Fehlermeldung: OLE-Fehler 800A01A8 //Diagramm.ChartArea.Select; //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes(Diagramm.Name).IncrementLeft := -200; //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes(Diagramm.Name).IncrementTop := 100; //Gibt zwar keine Fehlermeldung positioniert aber auch nicht das Chart //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes.Item(1).Top := ExcelApp.ActiveWorkbook.ActiveSheet.Rows.Item[20].Top; //ExcelApp.ActiveWorkbook.ActiveSheet.Shapes.Item(1).Left := ExcelApp.ActiveWorkbook.ActiveSheet.Columns.Item[2].Left; end; Gruß Sidi61 |
AW: Excel Chart positionieren
Mein Excel kommt mit demhier zurecht:
Delphi-Quellcode:
Im Zweifelsfalle in Excel ein Makro aufzeichnen, in dem Du die gewünschte Aufgabe erledigst und dann den so erzeugten VBA-Quelltext nach Delphi übernehmen und die Syntax dann entsprechend anpassen. Meistens klappt das recht gut und mit wenig Aufwand.
ActiveSheet.Shapes("Diagramm 1").Left := 0;
|
AW: Excel Chart positionieren
Hallo nahpets,
so wie dein Beispiel zeichnet das Excel Makro auf Shapes("Diagramm 1") - das lässt sich natürlich nicht compilieren. Ein Versuch mit Shapes('"Diagramm 1"') oder Shapes('Diagramm 1') erzeugt den Fehler: Mitglied nicht gefunden. Damit komme ich leider nicht weiter. Gruß Sidi61 |
AW: Excel Chart positionieren
Hallo zusammen,
nach dem ich nach unzähligen Versuchen nicht zum Erfolg gelangt bin, habe ich nun einen anderen Ansatz probiert der soweit zu funktionieren scheint Hatte ich zuvor das Diagram wie folgt erzeugt:
Delphi-Quellcode:
habe ich es jetzt wie folgt erzeugt:
Diagramm := ExcelApp.ActiveWorkbook.Charts.Add
Delphi-Quellcode:
Hier kann ich die erforderlichen Parameter übergeben: Abstand links, Abstand oben, Chartbreite, Charthöhe.
Diagramm := ExcelApp.ActiveWorkbook.Sheets[1].ChartObjects.Add(10,100,400,200);
Die Angaben entsprechen jedoch nicht Millimeter-Werten, eine Umrechnung wie bei Zeilenhöhe und Spaltenbreite passt hier auch nicht. Weiß jemand welche Einheit diese Parameter darstellen und wie hier auf mm umgerechnet werden kann?? Übrigends, das Ausrichten an einer Zelle funktioniert hier auch:
Delphi-Quellcode:
Gruß
Z := ExcelApp.ActiveWorkbook.Sheets[1].Range['D20'];
Diagramm.Left := Z.Left; Diagramm.Top := Z.Top; Sidi61 |
AW: Excel Chart positionieren
Ich bin´s noch mal ;-)
Anscheinend sei die Maßeinheit 72 Punkte je Zoll. Ich habe mal wie folgt umgerechnet:
Delphi-Quellcode:
Die Zielwerte sind nah drann - der Abstand zum linken Druckberich stimmt, die 50 mm zum oberen Druckbereich sind gemessen 48 mm, die Diagrammbreite hat statt 120 mm gemessen 130 mm und die Diagrammhöhe statt 100 gemessen 97 mm.
//Test:
//15 mm Abstand zum linken Druckbereich PosL := round(15 / 25.4 * 72); //50 mm Abstand zum oberen Druckbereich PosT := round(50 / 25.4 * 72); //120 mm Breites Chart ChartW := round(120 / 25.4 * 72); //100 mm Hohes Chart ChartH := round(100 / 25.4 * 72); //Parameter: Pos Left, Pos Top, Breite, Höhe Diagramm := ExcelApp.ActiveWorkbook.Sheets[Daten.DatenblattNummer].ChartObjects.Add(PosL,PosT,ChartW,ChartH); Geht das nicht genauer?? Gruß Sidi61 |
AW: Excel Chart positionieren
Zitat:
Das man bei Excel darauf achten muss, ob man ein Chart hinzufügt oder ob man auf einem Worksheet ein Chart hinzufügt, hast du ja schon gemerkt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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