WriterAutomation/de

From Lazarus wiki

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;



--Olaf 06:46, 11 March 2013 (UTC)