Seite 1 von 1

Modulübergreifendes Macro

Verfasst: Mi 27. Jun 2012, 15:20
von SigurdF
Hallo,
Ich möchte mir eine einfache Adress-Datenbank aufbauen und die Daten auch in Vorlagen einfügen. Ich beginne also im Writer mit der standardmässig geöffneten Seite "Untitled 1". Hier starte ich das Macro mit dem ersten Dialog, um die Vorlage auszuwählen. Einige Vorlagen benötigen Adressen, welche nun in Calc abgefragt werden, um dann in die Vorlage eingefügt zu werden.
Ich habe beide Teile separat hergestellt. Der Teil in Writer und der Datenbankteil in Calc arbeiten jeweils einwandfrei. Wenn nun mit dem Start in Writer die Seite "Untitled 1" geöffnet ist und ich öffne manuell die Calc-Datei mit den Datenbank-Daten, dann sind beide Dateien in der Taskleiste sofort verfügbar. Ich kann hin- und herspringen. So möchte ich es auch im Macro haben. Doch, wenn ich im Macro die Calc-Datei öffne, wird sofort die Writer-Datei "Untitled 1" geschlossen.
Dateiname = "file:///home/sigurd/LibreOffice/LibO_Calc/DataBase/Adressen.ods"
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "URL"
args6(0).Value = Dateiname
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Open", "", 0, args6())


Wenn dann das Macro wieder zu Writer zurückkehren soll, die Vorlage aufrufen soll und die entsprechenden Einfügungen machen soll, geht das nicht.
Wie kann ich das Problem lösen?

Re: Modulübergreifendes Macro

Verfasst: Fr 29. Jun 2012, 19:34
von komma4
Willkommen im Forum.

Mein Tipp: arbeite nicht mit dispatcher-Befehlen.

Mit folgendem Code öffnest Du Deine Calc-Datei und anschliessend ein neues Writer-Dokument (aus der Standardvorlage)

Code: Alles auswählen

oDeskNeu = createUnoService( "com.sun.star.frame.Desktop" )
sDateiname = "file:///home/sigurd/LibreOffice/LibO_Calc/DataBase/Adressen.ods"
oCalcDok = oDeskNeu.loadComponentFromURL( sDateiname, "_blank", 0, Array() )


sNeuURL = "private:factory/swriter"
oWriterDok = oDeskNeu.loadComponentFromURL( sNeuURL, "_blank", 0, Array() )
Nun kannst Du beide Dateien über deren Objektnamen ansprechen.


Einführende Literatur zur StarBasic-Programmierung:

Andrews Makro-Dokument
StarBasic FAQ

Objekt-Inspektions-Tools
XRAY
MRI


Viel Erfolg!

Re: Modulübergreifendes Macro SOLVED

Verfasst: Mi 4. Jul 2012, 14:53
von SigurdF
Hallo komma4,
es tut mir leid, dass ich erst heute wieder hier hereinschaue. Ich hatte Probleme mit einem neu gekauften Drucker-Scanner von Canon. Die Linuxtreiber, welche Canon anbietet, sind veraltet. Der Scanner-Treiber funktioniert nicht. Und Canon übernimmt keinerlei Support - extrem schlecht!!! Sie sollten auf ihrer Webseite wenigstens dazuschreiben, dass die Nutzung der Linux-Treiber auf eingene Gefahr ist. Unter Mithilfe des Ubuntu-Forums habe ich eine Seite gefunden, auf der die neuesten Scanner- und Drucker-Treiber für Canon-Geräte bereitgestellt sind. Und alles funktioniert! Das nur nebenbei.

Bei Andrew Pitonyak habe ich gefunden, dass das Öffnen und Schliessen von Dateien durch ein Macro anders behandelt wird als der manuelle Befehl im Modul. Ich ging davon aus, dass (wie bei den manuellen Befehlen im Modul) die Textdatei bestehen bleibt, obwohl ich eine Calc-Datei aufrufe und umgekehrt. Doch beim Aufruf einer Calc-Datei durch das Macro wird eine jede Textdatei automatisch geschlossen. Ich hatte nun nach Beendigung der Datenbank-Funktion im Calc-Modul die Calc-Datei mittels Macrobefehl geschlossen, da ich annahm, dass die Textdatei immer noch da ist. Doch nun ist keine Datei mehr da und das Macro stoppt. Ich habe einfach den Befehl zum Schliessen der Calc-Datei gelöscht, da die Calc-Datei beim Aufruf einer Textdatei vom Macro automatisch geschlossen wird. Und schon funktioniert alles!

Mich würde aber doch interessieren, warum ich keine Dispatcher-Befehle verwenden soll. Ich war immer der Ansicht, dass das UNO-Konzept die Weiterentwicklung ist. Liege ich da falsch?
#
Danke für die Hinweise,
Sigurd

Re: Modulübergreifendes Macro SOLVED

Verfasst: Do 5. Jul 2012, 21:41
von komma4
SigurdF hat geschrieben:warum ich keine Dispatcher-Befehle verwenden soll
dispatcher ist unglaublich schlecht dokumentiert und wird IMHO nicht weiter entwickelt.