ExcelAutomation/de
From Lazarus wiki
Revision as of 19:16, 20 September 2012 by Olaf (talk | contribs) (→Excel OleObjekt beenden und Speicher freigeben)
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)