Sign in Join
Wiki copytemporary

WriterAutomation/de

Zurück zur Office Automation.\

Writer

Benötigte Units

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

Aufbau einer Steuerung für die Anwendung Writer

Erstellen eines neuen Dokuments und es unter einem neuen Namen speichern

pascal

  ...
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

pascal
  ...
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:

pascal
  ...
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;

From the Free Pascal wiki, page "WriterAutomation/de", as it stood on 2020-03-04 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.