Kommunikation mit Excel

Die Kommunikation mit Excel läuft
über eine OLE-Schnittstelle (Object Linking and
Embedding). Delphi kann somit direkt auf Objekte von Excel
zugreifen. Damit OLE funktionieret muss ComObj
bei
Uses eingetragen werden.
Des weiteren ist auch die XLConst.pas
erforderlich, wenn man Excel eigene Konstante benötigt. Dazu
muss die Datei XLConst.pas in den Lib-Ordner von Delphi kopiert
werden und XLConst in
Uses mitaufgenommen
werden.

Verbindungsaufbau zu Excel
| |
var
Excel: Variant;
...
try
Excel := CreateOleObject('Excel.Application');
Excel.visible := true;
except
ShowMessage('Excel konnte nicht gestartet
werden !');
end;
Excel.DisplayAlerts:=False; //
unterdrückt die Ausgabe Hinweisen von Excel
Excel.Workbooks.Add; // um eine neue
Datei anzulegen
// Excel.WorkBooks.Open('c:\test.xls'); // um eine
vorhandene Datei zu öffnen
// hier folgen die eigentlichen Steuerbefehle...
VarClear(Excel);
// Freigabe |

Laden, Speichern, Umbenennen und Schließen
Excel-Sheet "laden"
| |
Excel.WorkBooks.Open('c:\test.xls');
// Laden
Excel.Save; // Speichern
Excel.Workbooks[1].SaveAs('c:\SaveAsTest.xls',Excel.Workbooks[1].fileformat);
// Speichern unter
Excel.Quit; // Schließen |

Tabellenblatt wechseln
| |
Excel.WorkBooks[1].WorkSheets[2'].Select;;
// wechselt auf das zweite Tabellenblatt
Excel.WorkBooks[1].WorkSheets['Tabelle2'].Select;;
// wechselt auf das Tabellenblatt mit dem
Namen "Tabelle2" |
Zellenwerte lesen und schreiben
Es wird immer auf das aktuelle
Tabellenblatt zugegriffen, also
gegebenenfalls vorher wechseln.
.Cells[Zeile, Spalte]
| |
var
s: String;
...
//
In die Zelle A1 wird der Text "Hallo Welt" geschrieben.
Excel.Cells[1,
1].Value :=
'Hallo Welt';
// Der Inhalt der Zelle A1
wird über Showmessage ausgegeben.
s := Excel.Cells[1,
1].Value;
Showmessage(s); |

Eigenschaften setzen
Zellenformatierung ändern
| |
Excel.Cells[1,
1].NumberFormat :=
'@'; //
Formatierung auf Text setzen
Excel.Cells[1,
1].NumberFormat :=
'0'; // Zahl
Excel.Cells[1,
1].NumberFormat :=
'0.0'; //
Zahl mit zwei Nachkommastellen
Excel.Cells[1,
1].NumberFormat :=
'dd/mm/yyyy';
// Datum, Tag/Monat/Jahr
Excel.Cells[1,
1].NumberFormat :=
'hh:mm:ss';
// Uhrzeit, 24-Stunden
Excel.Cells[1,
1].NumberFormat :=
'€#,##0.00';
// Währung EUR, zwei Nachkommastellen
Excel.Cells[1,
1].NumberFormat
:= 'General';
// Formatierung auf Standard setzen |
Formatierung des Zelleninhalts ändern:
| |
Excel.Cells[1,
1].Font.Name := 'Aial';
// Schriftart
Excel.Cells[1,
1].Font.Color := clRed;
// Schriftfarbe
Excel.Cells[1,
1].Font.Size :=
20;
// Schriftgröße
Excel.Cells[1,
1].Font.Bold := true;
// Fettdruck
Excel.Cells[1,
1].Font.Italic := true;
// Kursiv
Excel.Cells[1,
1].Font.Underline := true;
// Unterstrichen
Excel.Cells[1,
1].HorizontalAlignment := xlRight;
//
rechtsbündig,
linksbündig: "xlLeft", mittig: "xlCenter"
Excel.Cells[1,
1].VerticalAlignment := xlCenter;
//
mittig,
oben: "xlTop", unten: "xlBottom"
Excel.Cells[1,
1].WrapText := True;
// Zeilenumbruch
Excel.Cells[1,
1].Interior.Color := clRed;
// Zellenfarbe auf rot setzen |
Zellenhöhe und Breite bestimmen
| |
Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[1].RowHeight
:= 50;
// Höhe 50
Excel.WorkBooks[1].WorkSheets[1].Columns.Columns[1].ColumnWidth
:= 50;
// Breite 50 |

Neue Spalte einfügen
| |
Excel.Cells[1,
1].Select; //
selektiere Feld A1
Excel.Selection.EntireColumn.Insert; // füge links
vom selektiertem Feld eine neue Spalte ein |

Selektieren von Zellen, Spalten und Zeilen
| |
Excel.Cells[1,
1].Select; //
eine
bestimmte Zelle auf dem aktuellen Sheet (Tabelle) selektieren
Excel.WorkBooks[1].WorkSheets[1].Columns.Columns[2].Select;
// ganze Spalte selektieren
Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[2].Select;
// ganze Zeile selektieren |

Löschen von Spalten und Zeilen
Entweder Zeile/Spalte zunächst
seletieren und dann mittels Excel.Selection.Delete löschen oder
gleich:
| |
Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[2].Delete;
// ganze Zeile löschen
Excel.WorkBooks[1].WorkSheets[1].Columns.Columns[2].Delete
// ganze Spalte
löschen |

Zeile Einfrieren (Fixieren)
Es muss die Zeile selektiert werden,
welche unterhalb der Zeile liegt, bis wohin festgesetzt werden
soll.
| |
Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[2].Select;
// alles oberhalb bleibt stehen
Excel.ActiveWindow.FreezePanes := true; |

Position und Größe (in Pixel) einer Zelle ermitteln
Position bezogen auf die
linke, obere Ecke.
| |
Excel.Cells[1,
1].Top
// von oben
Excel.Cells[1,
1].Left
// von links
Excel.Cells[1,
1].Height
// Zellenhöhe
Excel.Cells[1,
1].Width
// Zellenbreite |

Hyperlink erstellen
| |
LinkZiel :=
'https://www.tech-ecke.de/delphi/excel.htm';
TextMarke := 'Hyperlink_erstellen';
Excel.ActiveSheet.Hyperlinks.Add(Excel.Cells[1,
1], LinkZiel, TextMarke, EmptyParam,
'klick mich'); |
oder
| |
Excel.WorkBooks[1].Worksheets[1].Hyperlinks.add(Excel.WorkBooks[1].Worksheets[1].cells[1,1],'http://www.tech-ecke.de'); |
Emailadresse verlinken:
| |
Excel.WorkBooks[1].worksheets[1].cells[1,1].Formula
:= '=HYPERLINK("mailto:webmaster@tech-ecke.de","Adresse")'; |

Bild einfügen
Das Bild "test.bmp" auf Laufwerk
C: wird auf dem aktuellen Tabellenblatt dargestellt. Die
Bilddatei wird hier nicht eingebettet, sondern es wird ein Link,
mit explizieter Pfadangabe zu Datei "C:\test.bmp"
erstellt. Die Position des Bildes (linke obere Ecke) ist 50
Pixel vom oberen und 5 Pixel vom linken Blattrand. Die Größe
wird in der Höhe auf 75 Pixel reduziert, die Breite des Bildes
passt sich proportional an.
| |
var
ExcelBild: Variant;
...
ExcelBild :=
Excel.WorkBooks[1].WorkSheets[1].Pictures.Insert('C:\test.bmp');
ExcelBild.Height := 75; //
Bildhöhe und/oder Breite mit .Width
ExcelBild.Name := 'Bild'; //
Objektname. Dieser ist z.B. beim Löschen
sehr hilfreich
ExcelBild.Left := 5 //
Bildposition
ExcelBild.Top := 50 //
Bildposition
ExcelBild.Placement := xlMoveAndSize; //
Bildposition abhängig von der Zellenposition und Größe |
Dieses Beispiel fügt ebenfalls
ein Bild ein, jedoch wird hier das
Bild in der Exceldatei eingebettet. Die Höhe und die Breite
müssen hier angegeben werden. Entspricht das Seitenverhältnis
nicht dem der Ursprungsdatei, so wird es verzerrt dargestellt.
| |
Excel.WorkBooks[1].WorkSheets[1].Shapes.AddPicture(FileName
:= 'C:\test.bmp',LinkToFile:=False,SaveWithDocument
:= True, Left := 5, Top :=
50, Width :=
75, Height := 100); |
Möchte man Eigenschaften vom Bild
ändern, so muss das Bild beim Erzeugen einer Variable
vom Typ Variant zugeordnet werden. Hier im Beispiel soll das Bild
nach dem Erzeugen an eine Zelle
gebunden werden (xlMoveAndSize
= 1).
| |
var
ExcelBild: Variant;
...
ExcelBild := Excel.WorkBooks[1].WorkSheets[1].Shapes.AddPicture(FileName
:= 'C:\test.bmp',LinkToFile := False,SaveWithDocument
:= True, Left := 10, Top :=
10, Width :=
400, Height := 300);
ExcelBild.Placement := xlMoveAndSize; //
Bildposition abhängig von der Zellenposition und Größe
ExcelBild.LockAspectRatio := true;
// Seitenverhältnis beim manuellen Anpassen beibehalten
ExcelBild.PictureFormat.TransparentBackground := true;
// Hintergrund (alles was weiß ist) transparent machen
ExcelBild.PictureFormat.TransparencyColor := clWhite; |

Bild löschen
Bezüglich Objektname
siehe Bild einfügen.
| |
Excel.WorkBooks[1].WorkSheets[1].Shapes('Bild').Delete
// Lösche Bild mit dem Objektnamen "Bild" |
Hintergrundbild für
Excel-Sheet einfügen (aus Datei)
| |
Excel.WorkBooks[1].WorkSheets[1].SetBackGroundPicture('c:\test.bmp'); |

Zellenrahmen
Das Beispiel
zeichnet einen Rahmen in schwarz, mit der Liniendicke 2 um die
Zellen B2 bis C3.
Geschlossener Rahmen um die Zelle - BorderAround(X,Y,Z)
X =
Linientyp
Y = Rahmenstärke (1-4)
Z = Rahmenfarbe
| |
Excel.WorkBooks[1].WorkSheets[1].Range['B2:C3'].BorderAround(1,2,1); |
Einzelne Rahmenelemente
| |
Excel.Cells[1,1].Borders[9].Weight
:= 2;
// Linienstärke in Pixel
Excel.Cells[1,1].Borders[9].ColorIndex
:= 3;
// Liniefarbe, siehe Tabelle unten
Excel.Cells[1,1].Borders[9].LineStyle
:= 1;
// Linientyp xlContinuous =
1 |
Linienpositionen:
| 7 |
xlEdgeLeft |
links |
| 8 |
xlEdgeTop |
oben |
| 9 |
xlEdgeBottom |
unten |
| 10 |
xlEdgeRight |
rechts |
Farbtabelle:
| 1 |
schwarz |
5 |
blau |
9 |
braun |
13 |
lila |
| 2 |
weiß |
6 |
gelb |
10 |
dunkel grün |
14 |
dunkel türkis |
| 3 |
rot |
7 |
violett |
11 |
dunkel blau |
15 |
hellgrau |
| 4 |
grün |
8 |
türkis |
12 |
oliv |
16 |
grau |

Autofilter setzen
Autofilter auf die
erste Zeile legen.
| |
Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[1].AutoFilter; |

Formel erzeugen
| |
Excel.Range['A6',
'A6'].Formula :=
'=Sum(A1:A5)'; |

Weiteres
Betriebsystem in der Zelle A1
anzeigen lassen
| |
Excel.Cells[1,
1].Value := Excel.OperatingSystem; |

|