AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel Chart positionieren

Ein Thema von Sidi61 · begonnen am 8. Dez 2016 · letzter Beitrag vom 12. Dez 2016
 
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#1

Excel Chart positionieren

  Alt 8. Dez 2016, 23:27
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:
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;
Freue mich über jede Antwort

Gruß
Sidi61
  Mit Zitat antworten Zitat
 


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 22:23 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