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 ein neues Sheet zu erstellen, ist demnach beim lesen eines vorhandenen Sheets nicht nötig!

   // hier folgen die eigentlichen Steuerbefehle...

VarClear(Excel); // Freigabe

 


 

   Daten Übertragen
 

Text in eine Zelle schreiben

.Cells[Zeile, Spalte]

   Excel.Cells[1, 1].Value := 'Hallo Welt';    // In die Zelle A1 wird der Text "Hallo Welt" geschrieben.
 


 

Bild auf ein Excel-Sheet übertragen

Im Beispiel wird das Bild von einer Datei geladen und bei den Koordinaten 10,10 der linken, oberen Ecke, mit der Weite 400 und der Höhe 300 erzeugt.

  Excel.WorkBooks[1].WorkSheets[1].Shapes.AddPicture(FileName := 'C:\test.bmp',LinkToFile:=False,SaveWithDocument := True, Left := 10, Top := 10, Width := 400, Height := 300);
 

Möchte man Eigenschaften vom Bild ändern, so muss das Bild beim Erzeugen zunächst einer Variable vom Typ Variant zugeordnet und dieser dann die Eigenschaft übertragen werden. Hier im Beispiel soll ein Bild 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

 


 

   Selektieren von Zellen

   Excel.Cells[1, 1].Select;    // eine bestimmte Zelle auf dem aktuellen Sheet (Tabelle) selektieren

 Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[2].Select; // ganze Zeile selektieren
 Excel.WorkBooks[1].WorkSheets[1].Columns.Columns[2].Select; // ganze Spalte selektieren
 


 

   Eigenschaften setzen

 

Zellenformat ändern:

   Excel.Cells[1, 1].Font.Name := 'Aial';  // Schriftart
 
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].Interior.Color := clRed;   // Zellenfarbe auf rot setzen

 

Zellenweite bestimmen

   Excel.WorkBooks[1].WorkSheets[1].Columns.Columns[1].ColumnWidth := 50;   // Setzt die erste Spalte auf die Weite 50
 


 

Zellenhöhe bestimmen

   Excel.WorkBooks[1].WorkSheets[1].Rows.Rows[1].RowHeight := 50;   // Setzt die erste Reihe auf die Höhe 50
 


 

    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[xlEdgeBottom].Weight := 2;   // Linienstärke
Excel.Cells[1,1].Borders[xlEdgeBottom].ColorIndex := 3;   // Liniefarbe, siehe Tabelle unten
Excel.Cells[1,1].Borders[xlEdgeBottom].LineStyle := xlContinuous;  // Linientyp
 

Linienpositionen:

xlEdgeTop oben
xlEdgeBottom unten
xlEdgeLeft links
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)';
 


 

   Laden, Speichern, Umbenennen und Schließen
 

Excel-Sheet "laden"

   Excel.WorkBooks.Open('c:\test.xls');
 


 

Excel-Sheet speichern

   Excel.Save;
 


 

Excel-Sheet speichern unter

   Excel.Workbooks[1].SaveAs('c:\SaveAsTest.xls',Excel.Workbooks[1].fileformat);
 


 

Excel-Sheet umbenennen

   Excel.WorkBooks[1].WorkSheets[1].Name := 'Ich heiß jetzt Otto';
 


 

Excel schließen

   Excel.Quit;
 


 

   Weitere Zugriffe

Hyperlink zu einer eMail-Adresse erzeugen

   Excel.WorkBooks[1].worksheets[1].cells[1,1].Formula := '=HYPERLINK("mailto:webmaster@tech-ecke.de","Adresse")';
 


 

Hyperlink zu einer Web-Adresse erzeugen

   Excel.WorkBooks[1].Worksheets[1].Hyperlinks.add(Excel.WorkBooks[1].Worksheets[1].cells[1,1],'http://www.tech-ecke.de');
 


 

Hintergrundbild für Excel-Sheet einfügen (aus Datei)

   Excel.WorkBooks[1].WorkSheets[1].SetBackGroundPicture('c:\test.bmp');
 


 

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]