Difference between revisions of "ExcelAutomation/de"

From Lazarus wiki
Jump to navigationJump to search
Line 55: Line 55:
 
<br>
 
<br>
  
==Excel OleObjekt: Fehlermeldungen und Warnungen deaktivieren==
+
=Excel OleObjekt: Fehlermeldungen und Warnungen deaktivieren=
 
Dekativieren von bestimmten Fehlermeldungen und Warnungen kann die Softwaresteuerung vereinfachen.
 
Dekativieren von bestimmten Fehlermeldungen und Warnungen kann die Softwaresteuerung vereinfachen.
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 65: Line 65:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Sichtbarkeit steuern==
+
=Excel OleObjekt: Sichtbarkeit steuern=
 
Das Verhindern der Anzeige beschleunigt die Verarbeitungsgeschwindigkeit und verhindert das Flackern des Bildschirms.
 
Das Verhindern der Anzeige beschleunigt die Verarbeitungsgeschwindigkeit und verhindert das Flackern des Bildschirms.
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 79: Line 79:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Workbook einfügen==
+
=Excel OleObjekt: Workbook einfügen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 88: Line 88:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Workbook speichern==
+
=Excel OleObjekt: Workbook speichern=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 98: Line 98:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Workbook unter neuem Namen speichern==
+
=Excel OleObjekt: Workbook unter neuem Namen speichern=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 107: Line 107:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Worksheet einfügen==
+
=Excel OleObjekt: Worksheet einfügen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 116: Line 116:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Worksheet umbenennen==
+
=Excel OleObjekt: Worksheet umbenennen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 126: Line 126:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Worksheet löschen==
+
=Excel OleObjekt: Worksheet löschen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 136: Line 136:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Formel einfügen==
+
=Excel OleObjekt: Formel einfügen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin
Line 146: Line 146:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Excel OleObjekt: Autofilter setzen==
+
=Excel OleObjekt: Autofilter setzen=
 
<syntaxhighlight>
 
<syntaxhighlight>
 
begin
 
begin

Revision as of 19:21, 20 September 2012

Excel als OleObjekt

Alle Möglichkeiten Excel zu Automatisieren ist nicht möglich ich hoffe aber für jeden Bedarf Anregungen gefunden zu haben.
Excel ist zu dem die automatisierungsfreundlichste Software von Microsoft.

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)