WriterAutomation/de

From Lazarus wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Windows logo - 2012.svg

Dieser Artikel behandelt ausschließlich Windows.

Siehe auch: Multiplatform Programming Guide/de

Deutsch (de)


Zurück zur Office Automation.


Writer

Benötigte Units

uses 
  ..., ComObj, Variants, LazUtf8, ...;

Aufbau einer Steuerung für die Anwendung Writer

Erstellen eines neuen Dokuments und es unter einem neuen Namen speichern

  ...
var
   // Reservieren des Speichers
   varOfficeApp: olevariant;
   varDesktop: olevariant;
   varLoadParams: olevariant;
   varDokument: olevariant;
   varBookmark: olevariant;
   varTextCursor: olevariant;
   strDateiname: shortstring; // nur Literale und Shortstrings sind automatisierbar


begin
  // Erstellt das OleObjekt und erstellt den Zeiger darauf
  varOfficeApp := CreateOleObject('com.sun.star.ServiceManager');

  // Erstellt den Zeiger auf den Officedesktop
  varDesktop := varOfficeApp.createInstance('com.sun.star.frame.Desktop');

  // Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
  varLoadParams := VarArrayCreate([0, -1], varVariant);

  // Erstellt ein neues (leeres) Dokument (Workbook) und setzt den Zeiger darauf
  varDokument := varDesktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, varLoadParams);

  ...

  // Variante 1:
  // Speichert das Dokument unter einem neuen Namen
  varDokument.StoreAsURL('file:///D:/test.odt', varLoadParams);

  // Variante 2:
  // Speichert das Dokument mit Umlauten im neuen Dateinamen
  strDateiname := 'file:///D:/' + Utf8ToSys('täst.odt');
  varDokument.StoreAsURL(strDateiname, varLoadParams);

  // Wird nicht zwischen dem Speichern und dem schliessen des Dokuments gewartet, dann stürzen
  // unter Umständen Star-, Open- und LibreOffice ab.
  // Beim Speichern auf Notebooks oder in Netzwerken empfehlen sich höhere Wartezeiten.
  Sleep(1000);

  // Schliesst das Dokument
  varDokument.close(True);

  // Beendet die Anwendung
  varDesktop.terminate;


  // Freigabe des Speichers
  varDesktop := UnAssigned;
  varDokument := UnAssigned;
  varLoadParams := UnAssigned;
  varOfficeApp := UnAssigned;
end;

Öffnen eines vorhandenen Dokuments und Speichern des Dokuments

  ...
var
   // Reservieren des Speichers
   varOfficeApp: olevariant;
   varDesktop: olevariant;
   varLoadParams: olevariant;
   varUrl: variant;
   varDokument: olevariant;

begin
  // Erstellt das OleObjekt und erstellt den Zeiger darauf
  varOfficeApp := CreateOleObject('com.sun.star.ServiceManager');

  // Erstellt den Zeiger auf den Officedesktop
  varDesktop := varOfficeApp.createInstance('com.sun.star.frame.Desktop');

  // Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
  varLoadParams := VarArrayCreate([0, -1], varVariant);

  // Öffnet ein neues vorhandenes Dokument (Workbook) und setzt den Zeiger darauf
  varDokument := varDesktop.LoadComponentFromURL('file:///D:/Test.odt', '_blank', 0, varLoadParams);

  // Speichert das Dokument
  varDokument.Store;

  ...

  // Wird nicht zwischen dem Speichern und dem schliessen des Dokuments gewartet, dann stürzen
  // unter Umständen Star-, Open- und LibreOffice ab.
  // Beim Speichern auf Notebooks oder in Netzwerken empfehlen sich höhere Wartezeiten.
  Sleep(1000);

  // Schliesst das Dokument
  varDokument.Close(True);

  //Beendet die Anwendung
  varDesktop.terminate;

  // Freigabe des Speichers
  varDesktop := UnAssigned;
  varDokument := UnAssigned;
  varLoadParams := UnAssigned;
  varOfficeApp := UnAssigned;  
end;

Öffnen eines vorhandenen Dokuments und das Verwenden von Bookmarks

Bevor mit Bookmarks gearbeitet werden kann muss ein Office-Dokument als Vorlage erstellt werden.

Diese Vorlage müssen Sie an den entsprechenden Stellen mit den benötigten Bookmarks versehen.

Beispiel:

  ...
var
  // Reservieren des Speichers
  varOfficeApp: olevariant;
  varDesktop: olevariant;
  varLoadParams: olevariant;
  varDokument: olevariant;
  varBookmark: olevariant;
  varTextCursor: olevariant;

  // Benötigte Hilfsvariable
  varUebergabe: variant;

begin

  // Erstellt das OleObjekt und erstellt den Zeiger darauf
  varOfficeApp := CreateOleObject('com.sun.star.ServiceManager');

  // Erstellt den Zeiger auf den Officedesktop
  varDesktop := varOfficeApp.createInstance('com.sun.star.frame.Desktop');

  // Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
  varLoadParams := VarArrayCreate([0, -1], varVariant);

  // Öffnet ein neues vorhandenes Dokument (Workbook) und setzt den Zeiger darauf
  varDokument := varDesktop.LoadComponentFromURL('file:///D:/Test.odt', '_blank', 0, varLoadParams);

  ...

  // Holt die Adresse der Bookmark
  varBookmark := varDokument.BookMarks.getByName('txtTest');

  // Bestimmt die Adresse des Cursors
  varTextCursor := varBookmark.Anchor.Text.createTextCursorByRange(varBookmark.Anchor);

  // Weist der Hilfsvariablen einen UTF16 codierten Text zu
  // Der Text sollte immer UTF16 codiert sein, das die Office-Anwendungen nur UTF16 beherrschen
  varUebergabe := Utf8ToUtf16('Hallo Welt');

  // Übergibt die Hilfsvariable an den textCursor der Office-Anwendung
  varTextCursor.SetString(varUebergabe);

  ...

  // Speichert das Dokument
  varDokument.store;

  // Wird nicht zwischen dem Speichern und dem schliessen des Dokuments gewartet, dann stürzen
  // unter Umständen Star-, Open- und LibreOffice ab.
  // Beim Speichern auf Notebooks oder in Netzwerken empfehlen sich höhere Wartezeiten.
  Sleep(1000);

  // Schliesst das Dokument
  varDokument.Close(True);

  // Beendet die Anwendung
  varDesktop.terminate;

  // Freigabe des Speichers
  varUebergabe := Unassigned;
  varTextCursor := Unassigned;
  varBookmark := Unassigned;
  varDokument := Unassigned;
  varLoadParams := Unassigned;
  varDesktop := Unassigned;
  varOfficeApp := Unassigned;
end;