Macro per API starten

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Carsten H
**
Beiträge: 26
Registriert: Di, 28.11.2006 23:29

Macro per API starten

Beitrag von Carsten H »

Ich möchte den Writer aus einer anderen Anwendung fernsteuern, um ein Dokument aus zahlreichen kleinen odt-Dateien zusammenzustellen und dann als pdf zu speichern. Am Anfang soll ein Inhaltsverzeichnis stehen. Hab also für meine Versuche ein Rohdokument mit Deckblatt und (erstmal leerem) Inhaltsverzeichnis angelegt und mehrere odt-Dateien für den import, die je eine Überschrift enthalten.
Die Fernsteuerung läuft, es entsteht die gewünshcte Gesamtdatei, aber ich muss das Inhaltsverzeichnis in OO einmal per Rechtsklick aktualisieren, damit es sich mit Inhalt füllt. Da mir keine Funktion bekannt ist, dass sich das Inhaltsverzeichnis automatisch akualisiert und ich auch über den verwendeten Wrapper keinen direkten Zugriff darauf habe, hab ich ein Makro gebaut, das das Inhaltsverzeichnis aktualisiert. Rufe ich das Makro in OO auf, tut es seinen Dienst, aber es ist mir nicht gelungen, es von der anderen Anwendung aus zu starten.

Hier der Stand nach dem Erstellen des Gesamtdokuments, Inhaltsverzeichnis auf der 2. Siete ist leer, rechts die beiden Tabellen mit Überschriften wurden importiert.

Bild

Mit folgendem Code steuere ich OO fern. Hab auch diverse Varianten beim Makronamen probiert, aber keine Reaktion. Hat jemand eine Idee?

Code: Alles auswählen

OOWriter:=TOOWriter.Create;
OOWriter.Connect:=true;
if OOWriter.Connect then
begin
  OOWriter.OpenDocument('D:\...\uebungen.odt', [], ommAlwaysNoWarn);  
  OOWriter.InsertDocument('D:\...\Fahrt1.odt', oipEnd);
  OOWriter.InsertDocument('D:\...\Fahrt2.odt', oipEnd);
  OOWriter.ExecMacro('Standard.Module1.Main?language=Basic&location=document');
  OOWriter.SaveDocument('D:\...\uebungen_neu.odt', '');
end;
OOWriter.Free;
Und das Makro

Code: Alles auswählen

REM  *****  BASIC  *****
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:UpdateAllIndexes", "", 0, Array())

end sub
Viele Grüße
Carsten
Carsten H
**
Beiträge: 26
Registriert: Di, 28.11.2006 23:29

Re: Macro per API starten

Beitrag von Carsten H »

Hab's inzwischen so gelöst, dass das Makro bei passenden Ereignissen aus OO heraus gestartet wird. Das tut seinen Zweck.

Carsten
Antworten