Tech-Ecke / Delphi Inhalt / Kommunikation mit Excel

 

     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.

    XLConst.pas

 


   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;
 

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 15.02.2015]