Home » Tutorials » Third-Party-Komponenten » OLE-Automation von MS Office

OLE-Automation von MS Office

Daten an Excel übergeben

Nachdem wir Excel aufgerufen haben, können wir Daten an Excel übergeben. Dazu hier ein kleiner Einschub:
Wie oben schon angedeutet, ist Excel einfach anders als Word. Das betrifft auch die Objektstruktur. Gibt es bei Word eine TWordApplikation und ein TWordDocument, sieht die Unterteilung in Excel so aus:
Eine ExcelApplication hat eine Sammlung von Workbooks. Jedes Workbook hat wiederum eine Sammlung von WorkSheets. Diese Worksheets sind schließlich gleichbedeutend wie das Dokument in Word, dort werden also die Daten eingetragen. Das Worksheet hat allerdings wiederum eine große Anzahl von weiteren Objekten z.B. Shapes, auf die zugegriffen werden kann.
Füge einen weiteren TButton in die Applikation ein. Der Button bekommt die Caption „Öffnen” und folgenden Code in das OnClick-Ereignis:

procedure TForm1.Button3Click(Sender: TObject);
var sValue, filename: String;
begin
  filename:=ExtractFilePath(ParamStr(0))+'Mappe1.xls';
  ExcelWorkbook.ConnectTo(ExcelApplication.Workbooks.Open(filename,
    emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
    emptyParam, emptyParam, emptyParam, emptyParam, emptyParam,
    emptyParam, flcid));
  ExcelWorksheet.ConnectTo(ExcelWorkbook1.Sheets.Item[1] as
    ExcelWorkSheet);
  sValue:=ExcelWorksheet.Range['B1','B1'].Value;
  MessageDlg(sValue, mtInformation, [mbOK], 0);
end;

Nicht vergessen: Wer keine Komponenten hat muss die Variablen deklarieren und erzeugen (ExcelWorkbook:TExcelWorkbook; ExcelWorkSheet:TExcelWorksheet).
Die Methode ExcelApplication.Workbooks.Open hat als Rückgabewert ein Objekt vom Typ TWorkBook. Dadurch kann man unsere TExcelWorkbook Instanz direkt mit der geöffneten Datei verbinden. Bei dieser Methode muss wieder die flcid mit übergeben werden!
Anschließend kann das WorkSheet verknüpft werden. Da aber ExcelWorkbook.Sheets.Items[] als Rückgabewert eine Variable des Typs IDispatch besitzt, TExcelWorksheet..ConnectTo() aber einen Parameter vom Typ _WorkSheet benötigt, muss eine Typumwandlung stattfinden. Dies geschieht
durch den Aufruf von as ExcelWorkSheet. Nun kann mit ExcelWorksheet.Range[].Value der Wert der einzelnen Zellen herausgelesen werden.
Da wir nun Zugriff auf die Zellen haben, können wir daran gehen, Daten an Excel zu übergeben: Setzte einen weiteren TButton in das Formular mit der Caption „Datenübergabe”. In das OnClick-Ereignis kommt:

procedure TForm1.Button4Click(Sender: TObject);
var oleArray:OleVariant;
begin
  OleArray:=VarArrayCreate([0,3],varVariant);
  OleArray[0]:=10;
  OleArray[1]:=20;
  OleArray[2]:=30;
  OleArray[3]:=40;
  ExcelWorksheet.Range['B3','E3'].Value:=OleArray;
  ExcelWorksheet.Range['F3','F3'].Formula:='=SUM(B3..E3)';
end;

Zunächst wird ein Array vom Typ OleVariant definiert. Dieses wird dann mit den Werten gefüllt. Mit einer einfachen Zuweisung (ExcelWorksheet.Range[‚B3′,’E3‘].Value:=OleArray;) werden die Daten an
Excel übergeben.
Neben Zahlen und Buchstaben kannst Du natürlich auch eine Formel an Excel übergeben. Dabei hast Du auf alle in Excel definierten Funktionen zugriff, Du musst lediglich die Notation kennen.