Automatisierung von OpenOffice mit Delphi

Automatisierung von OpenOffice mit Delphi am Beispiel eines Briefdokumentes, bei dem ein neues Dokument auf Basis eines Templates erstellt wird und die darin enthaltenen Variablen/Platzhalter durch Datenbankinhalte ersetzt werden. Abschließend wird das Dokument gespeichert.

Dieser Beitrag beschreibt die Automatisierung von OpenOffice mit Hilfe von Delphi. Die Automatisierung von Microsoft Office wird oft beschrieben, und Beispiele finden sich auch genug, so dass, zumindest für einfache Aufgaben, es für erfahrene Programmierer keinen größeren Schwierigkeitsgrad bedeutet, MS Office anzusteuern.Bei OpenOffice ist dies etwas schwieriger,  zumindest hapert es doch oft an einem einfachen einführenden Beispiel

Um die Sache für andere, die vor dem gleichen Problem stehen mögen, zu erleichtern, wird an einem Beispiel (siehe Anmerkungen in den Prozeduren) gezeigt, wie man

  • OpenOffice von Delphi aus startet
  • Ein neues Dokument öffnet, welches ein vorbereitetes Template verwendet
  • Wie man Variablen in diesem Dokument mit Inhalten, z.B. aus einer Datenbank ersetzt
  • Wie man dieses Dokument speichert
  • Was zu beachten ist beim Automatisierungsprozess von OpenOffice

Als Template wird eine beliebige Vorlagendatei erstellt (*.ott). Dabei werden Platzhalter in das Dokument eingefügt im Format {Variable}.
Diese Variablen werden zur Laufzeit dann durch die Inhalte der entsprechenden, gleichnamigen, Datenbankfelder ersetzt.

Wichtig: selber arbeite ich nicht mit OpenOffice, bin also kein Experte für dessen API. Es ging mir nur darum eine Teilaufgabe zu lösen, die benötigt wurde, nicht um ein tieferes Verständnis der Materie. Das nachfolgende Beispiel bietet aber Grundlagen, die zur Lösung eigener Aufgaben als Basis verwendet werden können.

Zur Lösung der Aufgabe werden zwei Prozeduren und eine Funktion benötigt:

Procedure ReplaceOOText
führt die Ersetzungsfunktionen im Dokument durch
Function ConvertToOOUrl passt einen Dateinamen an die Erfordernisse von OpenOffice an (Unix-Stil)
Procedure SchreibeBrief schließt erstellt ein neues Dokument, ersetzt die Platzhalter, z.B. mit Datenbankinhalten und speichert das Dokument am Ende.

Benötigt wird im Units-Abschnitt die Unit Variants!

procedure ReplaceOOText(document: Variant; SearchTxt, ReplaceTxt: string; Headers: boolean = true);
var
  ErsetzenDescriptor: variant;
begin
  ErsetzenDescriptor := Document.createReplaceDescriptor;
  ErsetzenDescriptor.SearchString := SearchTxt;
  ErsetzenDescriptor.ReplaceString := ReplaceTxt;
  ErsetzenDescriptor.ReplaceAll(ErsetzenDescriptor);
end;

function ConvertToOOUrl(pfad: string): string;
// OpenOffice benötigt Pfadangaben im Unixstil,
// daher werden '\' in '/' umgewandelt
// Außerdem wird ein file:/// vorangestellt
var
  rueckgabe: string;
  i: Integer;
begin
  rueckgabe := 'file:///';
  while (Pos('\', pfad) > 0) do
  begin
    i := Pos('\', pfad);
    delete(pfad, i, 1);
    Insert('/', pfad, i);
  end;
  rueckgabe := rueckgabe + pfad;
  result := rueckgabe;
end;

procedure SchreibeBrief;
var WordP, desktop, document, loadParams      : Variant;
        varList:TStringlist;
        datei:String;

begin
  datei:='';
  savedialog := TSaveDialog.Create(nil);
  try
  saveDialog.FileName := '';
  savedialog.filter := 'odt|*.odt';
  savedialog.DefaultExt := 'ODT';
  if savedialog.Execute() then
    datei:=savedialog.FileName;
  finally
    savedialog.free;
  end;

  IF length(datei)=0 then
   exit;
  try
   WordP := CreateOleObject('com.sun.star.ServiceManager');
   // Wichtig ist hier auf Groß- und Kleinschreibung zu achten!
  except
    on e: exception do
    begin
      showmessage('OpenOffice wurde auf Ihrem System nicht gefunden, oder konnte nicht gestartet werden. Überprüfen Sie Ihre Office Installation');
      exit;
    end;
  end;

  try
    desktop := WordP.CreateInstance('com.sun.star.frame.Desktop');
    // Wichtig ist hier auf Groß- und Kleinschreibung zu achten!
  except
   on e: exception do
   begin
     showmessage('Es ist ein Fehler beim Ausführen des Automatisierungsobjektes aufgetreten. Überprüfen Sie Ihre Office Installation.');
     exit;
   end;
  end;

  try
    Document := Desktop.LoadComponentFromURL(ConvertToOOUrl(IhreVorlageDatei), '_blank', 0, VarArrayCreate([0, -1], varVariant))
    // Wichtig: wird als erster Parameter der Name eine OpenOffice Vorlagendatei übergeben,
    // so wird ein neues Dokument auf Basis dieser Vorlage erstellt
  except
    on e: exception do
    begin
      showmessage('Es ist ein Fehler beim Ausführen des Automatisierungsobjektes aufgetreten. Überprüfen Sie Ihre Office Installation.');
      exit;
    end;
  end;
  varList := TStringlist.Create;
  try
    varList.add('Nachname');
    varList.add('Vorname');
    varList.add('PLZ');
    varList.add('Ort');
    varList.add('Strasse');
    for i := 0 to VarList.Count - 1 do
      ReplaceOOText(document,'{'+varlist.strings[i]+'}',mytable.FieldByName(varlist.Strings[i]).AsString,false);
    document.storeAsURL(ConvertToOOUrl(ExpandUNCFileName(dateieinfach)), VarArrayCreate([0, -1], varVariant));
    if sysutils.FileExists(datei) = false then
      showmessage('Die Datei ' + datei +  ' wurde nicht erstellt')
    else
      showmessage('Die Datei ' + datei +  ' wurde erstellt')
  finally
    varList.free;
   end;
end;

Viel Spaß beim Testen und Weiterentwickeln
Werbung

Aktuelle Top Aktionen bei Acer, HP, Lenovo, Bitdefender & Co

Angebote bei Acer
» Großer Acer Herbst Sale:Bis zu 200 Euro Rabatt auf viele Acer Notebooks, Convertibles, Gaming Notebooks und PC, Monitore und mehr bei den Acer Herbst Angeboten bis 02.10.2018


Angebote bei HP
» HP Back To School 2018: Viele HP Notebooks, Convertibles und Drucker im Angebot


Angebote bei Lenovo
» Lenovo Top Wochenangebote: Heiße ThinkPad und IdeaPad Wochenangebote mit großer Auswahl und dicken Rabatten


Weitere Möglichkeiten
» Top bei Otto: Sehr gute HP Notebook Angebote, teils mit Extras wie 4 Jahre Garantie und mehr
» Mehr Aktionen in der Übersicht: Aktuelle HP Angebote und mehr auf einem Blick


Aktuelle Bitdefender Aktionen:
» Top Angebot: Bitdefender "The Darkest Minds Promotion" mit kostenlosem Gewinnspiel und Angebot Total Security 2019 MultiDevice nur 39,99€ statt 79,99 Euro (50% Rabatt)
» Bitdefender Sommer-Aktion Version 2019 mit 15 Euro Rabatt auf Bitdefender Antivirus Plus 2019 (3 Geräte und 1 Jahr), 30 Euro Rabatt auf Bitdefender Internet Security 2019 (3 Geräte und 1 Jahr) und 40 Euro Rabatt auf Bitdefender Total Security Multi Device 2019 (5 Geräte und 1 Jahr)
» Bitdefender +1 Jahr dazu-Aktion
» Top für neue PCs! Bitdefender AntiVirus Plus Lebenslang Edition: 5 Jahre Schutz für nur für nur 89,95
Weitere aktuelle Bitdefender Angebote » Alle Bitdefender Angebote auf einem Blick

Werbung

Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.