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;