ExcelAutomation/de

From Lazarus wiki
Jump to navigationJump to search

Excel als OleObjekt


Speicherplatz reservieren

var
   varXLApp: OleVariant;


Excel OleObjekt erstellen

begin
   ...
   try
     varXLApp := CreateOleObject('Excel.Application');  // erstellt das Excelobjekt
   except
     WriteLn('MS Excel kann nicht gestartet werden.');  // Fehlerbehandlung
   end;
   ...
end;


Excel OleObjekt beenden und Speicher freigeben

begin
   ...
   varXLApp.Quit;
   varXLApp := Unassigned; //Der Speicher muss am Ende wieder freigegeben werden, sonst entstehen Speicherlecks 
   ...
end;


Excel Version ermitteln

begin
  ...
  ShowMessage(varXLApp.Version);
  ...
end;


Excel OleObjekt: Datei öffnen und Datei schliessen

begin
   ...
   varXLApp.Workbooks.Open(strPfad); // öffnet die Exceldatei (Pfad: maximal 255 Zeichen, Alphanumerisch)
   ...
   varXLApp.Workbooks[1].Close;
   ...
end;


Excel OleObjekt: Fehlermeldungen und Warnungen deaktivieren

Dekativieren von bestimmten Fehlermeldungen und Warnungen kann die Softwaresteuerung vereinfachen.

begin
   ...
   varXLApp.DisplayAlerts := False;   // schaltet diverse Fehlermeldungen von Excel aus
   ...
end;


Excel OleObjekt: Sichtbarkeit steuern

Das Verhindern der Anzeige beschleunigt die Verarbeitungsgeschwindigkeit und verhindert das Flackern des Bildschirms.

begin
   ...
   varXLApp.Visible := False;         // macht Excel unsichtbar
   varXLApp.ScreenUpdating = False;   // schaltet das ScreenUpdating von Excel aus

   varXLApp.ScreenUpdating = True;    // schaltet das ScreenUpdating von Excel ein
   varXLApp.Visible := True;          // macht Excel sichtbar
   ...
end;


Excel OleObjekt: Workbook einfügen

begin
   ...
   varXLApp.Workbooks.Add;               // fügt ein neues Workbook ein
   ...
end;


Excel OleObjekt: Workbook speichern

begin
   ...
   varXLApp.Workbooks[1].Save;           // speichert ein Worksheet über seinen Index
   varXLApp.Workbooks['Test.xls'].Save;  // speicher ein Worksheet über seinen Namen
   ...
end;


Excel OleObjekt: Workbook unter neuem Namen speichern

begin
   ...
   varXLApp.Workbooks[1].SaveAs('D:\Test.xls', varXLApp.Workbooks[1].fileformat);
   ...
end;


Excel OleObjekt: Worksheet einfügen

begin
   ...
   varXLApp.WorkBooks[1].WorkSheets.Add; //fügt ein neues WorkSheet hinzu
   ...
end;


Excel OleObjekt: Worksheet umbenennen

begin
   ...
   varXLApp.WorkBooks[1].WorkSheets[1].Name := 'Neuer Name'; // benennt ein Worksheet über seinen Index um
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Name := 'Neuer Name'; // benennt ein Worksheet über seinen Namen um
   ...
end;


Excel OleObjekt: Worksheet löschen

begin
   ...
   varXLApp.WorkBooks[1].WorkSheets[3].Delete;               // löscht ein Worksheet über seinen Index
   varXLApp.WorkBooks[1].WorkSheets['Tabelle3'].Delete;      // löscht ein Worksheet über seinen Namen
   ...
end;


Excel OleObjekt: Formel einfügen

begin
   ...
   // setzt den Autofilter auf die erste Zeile
   varXLApp.Range['C6', 'C6'].Formula := '=Sum(A5:A7)'
   ...
end;


Excel OleObjekt: Autofilter setzen

begin
   ...
   // setzt den Autofilter auf die erste Zeile
   varXLApp.WorkBooks[1].WorkSheets[1].Rows.Rows[1].AutoFilter;
   ...
end;


Excel OleObjekt: Zeilenbreite und Spaltenhöhe setzen

begin
   ...
   // Setzt die Spaltenbreite für Spalte 1
   varXLApp.WorkBooks[1].WorkSheets[1].Columns.Columns[1].ColumnWidth := 70;
   // oder
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Columns.Columns[1].ColumnWidth := 70;

   // Setzt die Spaltenhöhe für Zeile 1
   varXLApp.WorkBooks[1].WorkSheets[1].Rows.Rows[1].RowHeight := 60;
   // oder
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Rows.Rows[1].RowHeight := 60;
   ...
end;


Excel OleObjekt: Rahmen zeichnen

begin
   ...
   // Zeichnet einen Rahmen um den Bereich "B2:C3"
   // Der Parameter BorderAround hat folgende Syntax: BorderAround(Linienstil, Linenstärke, Farbe)
   varXLApp.WorkBooks[1].WorkSheets[1].Range['B2:C3'].BorderAround(1, 2, 1);
   ...
end;


Excel OleObjekt: Hyperlinks und URLS einfügen

begin
   ...
   // Fügt eine URL in Zelle "A2" in Sheet 2 ein
   // Alternative 1
   varXLApp.WorkBooks[1].Worksheets[2].Hyperlinks.add(
     varXLApp.WorkBooks[1].Worksheets[2].Cells[2, 1], 'http://www.google.de');
   // Alternative 2
   varXLApp.WorkBooks[1].worksheets[2].Cells[2,1].Formula := '=HYPERLINK("http://www.google.de")';

   // Fügt eine Emailadresse als Formel in Zelle "A3" in Sheet 2 ein
   varXLApp.WorkBooks[1].worksheets[2].Cells[3,1].Formula := '=HYPERLINK("mailto:test.testmann.@test.com","Email")';
   ...
end;


Excel OleObjekt Worksheet: Hintergrundbild einfügen

begin
   ...
   varXLApp.WorkBooks[1].WorkSheets[1].SetBackGroundPicture('D:\Testbild.JPG');                   // fügt das Hintergrundbild über Index ein
   varXLApp.WorkBooks['Test.xls'].WorkSheets['Tabelle2'].SetBackGroundPicture('D:\Testbild.JPG'); // fügt das Hintergrundbild über Namen ein
   ...
end;


Excel OleObjekt: Wert einfügen

begin
   ...
   // Alternative 1
   varXLApp.WorkBooks[1].WorkSheets[1].Range['A5'].Value := 3;
   varXLApp.WorkBooks[1].WorkSheets[1].Range['A6'].Value := 3;
   varXLApp.WorkBooks[1].WorkSheets[1].Range['A7'].Value := 3;
   // Alternative 2
   varXLApp.WorkBooks[1].WorkSheets[1].Range['A5', 'A7'].Value := 3;
   // Alternative 3
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Range['A5', 'A7'].Value := 3;
   // Alternative ...
   ...
end;


Excel OleObjekt: Formel einfügen

begin
   ...
   // Alternative 1
   varXLApp.WorkBooks[1].worksheets[2].Cells[6,3].Formula := '=Sum(A5:A7)';
   // Alternative 2
   varXLApp.WorkBooks[1].WorkSheets[2].Range['C6'].Formula := '=Sum(A5:A7)';
   ...
end;


Excel OleObjekt: Arbeiten mit Schriften

begin
   ...
   // Legt die Schriftart fest
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Cells[1, 1].Font.Name := 'Arial';
   // Legt die Schriftgröße fest
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Cells[1, 1].Font.Size := 20;
   // Legt die Fettschrift fest
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Cells[1, 1].Font.Bold := True;
   //Legt die Kursivschrift fest
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Cells[1, 1].Font.Italic := True;
   // Unterstreicht den Eintrag
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Cells[1, 1].Font.Underline := True;
   ...
end;


Excel OleObjekt: Worksheet aktivieren

begin
   ...
   varXLApp.WorkBooks[1].WorkSheets['Tabelle1'].Activate;
   ...
end;


Excel OleObjekt: Chart erstellen

Die Beispiele gehen davon aus, dass das Excelobjekt (varXLApp) bereits existiert und die Exceldatei geöffnet ist.

Chart Speicher reservieren

var
   varDiagramm: OleVariant;


Chart Speicher freigeben

begin
   ...
   varDiagramm := Unassigned;
   ...
end;


Chart Objekt erstellen

begin
   ...
   varDiagramm := varXLApp.Charts.Add; // Fügt ein Chart ein
   ...
end;


Chart aktivieren

begin
   ...
   varDiagramm.Activate; // Aktiviert das Chart
   ...
end;


Chart Diagramtyp festlegen

begin
   ...
   varDiagramm.ChartType := xlColumnClustered; // Legt den Diagramtyp fest
   ...
end;


Chart Datenherkunft (Datenquelle) festlegen

begin
   ...
   varDiagramm.SetSourceData (Source := varXLApp.WorkSheets['Tabelle1'].Range['A1:E13'],
                           PlotBy := xlColumns);  // Legt die Datenherkunft (das Excelsheet und den Bereich im Excelsheet) fest
   ...
end;


Chart verschieben festlegen

begin
   ...
   // Diagramm im selben Tabellenblatt wie die Datentabelle.
   varDiagramm.Location (Where := xlLocationAsObject, Name:= 'Tabelle1');
   ...
end;


Chart Titel

begin
   ...
   varXLApp.Worksheets[1].ChartObjects[1].Chart.HasTitle := True;  // Legt fest, dass das Chart einen Titel haben darf
   varXLApp.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Characters.Text := 'Test';    // Legt den Namen des Chart Titels fest
   varXLApp.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Font.Color := vbRed;          // Legt die Schriftfarbe des Diagrammtitels fest
   varXLApp.Worksheets[1].ChartObjects[1].Chart.ChartTitle
                                   .Interior.Color := vbCyan;     // Legt die Hintergrundarbe des Diagrammtitels fest
   ...
end;


Chart Achsenbeschriftung

begin
   ...
   varXLApp.Worksheets[1].ChartObjects[1].Chart.HasAxis(xlCategory) := True;     // Legt fest, dass das Chart Achsen hat
   varXLApp.Worksheets[1].ChartObjects[1].Chart.Axes(xlCategory).TickLabels
									.Font.Color := vbBlue;                      // Legt die Schriftfarbe der Achsenkategorie fest
   varXLApp.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).HasTitle:= True;  // Legt fest, dass das Chart eine Achsenbeschriftung haben darf
   varXLApp.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle
	                                .Characters.Text := 'Euro';                 // Legt den Achsentitel fest, Achtung: es gibt Probleme mit dem Eurozeichen €
   varXLApp.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle
                                     .Font.Color := vbBlue;                     // Legt die Schriftfarbe des Achsentitels fest
   varXLApp.Worksheets[1].ChartObjects[1].Chart.Axes(xlValue).AxisTitle
                                     .Font.Size := 12;	                        // Legt die Schriftgrösse des Achsentitels fest
   ...
end;


Chart Legende

begin
   ...
   varXLApp.Worksheets[1].ChartObjects[1].Chart.SeriesCollection(1)
	                                   .Name := '="Eins"'; //Legt die Beschriftung der Chartlegende fest
   ...
end;



--Olaf 17:13, 20 September 2012 (UTC)