Verständnisproblem zum DispatchHelper

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Verständnisproblem zum DispatchHelper

Re: Verständnisproblem zum DispatchHelper

von juetho » Mi, 09.06.2010 17:50

Wieder eine neue Arbeitsweise. :mrgreen:
DPunch hat geschrieben:Sprich dort kannst Du einfach so arbeiten, wie Du es auch im aktuell geöffneten Dokument, ...
Aufgrund des Makro-Recorders dachte ich, dass all das mit dem DispatchHelper erledigt würde (gehe an den Anfang, suche Text, gehe ein paar Zeichen nach rechts, einfügen).

Mit dem Stichwort createSearchDescriptor bin ich wenigstens in der [Doku] Editing Text Documents fündig geworden; das sollte mir tatsächlich weiterhelfen. Vermutlich geht das mit dem direkten Aufruf von Methoden auch einfacher als mit dem DispatchHelper und dessen komplexen com.sun.star.beans.PropertyValue-Instanzen.

Bis zum nächsten Problem. Jürgen

Re: Verständnisproblem zum DispatchHelper

von DPunch » Mi, 09.06.2010 17:05

Aloha
juetho hat geschrieben:

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
Jetzt brauche ich Zugriff auf diese Datei.
Auf die neu geöffnete Datei hast Du von nun an über "destDoc" Zugriff.
loadComponentFromURL liefert Dir direkt die Referenz auf das Model des neuen Dokuments.

Sprich dort kannst Du einfach so arbeiten, wie Du es auch im aktuell geöffneten Dokument, dass man sich in der Regel mit thisComponent holt, tun würdest.

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
oSearchDescriptor = destDoc.createSearchDescriptor
(...)

Verständnisproblem zum DispatchHelper

von juetho » Mi, 09.06.2010 16:19

Hallo,

ich habe noch ein Problem, wie ich DispatchHelper richtig verwende. Meine Situation:
1. Ein Word-Dokument wird im Writer manuell geöffnet.
2. Ein OOo-Makro liest den Inhalt des ersten Dokuments in eine String-Variable.
3. Das Makro öffnet variabel (abhängig vom Inhalt des ersten Dokuments) ein anderes Word-Dokument.
4. Das Makro sucht im zweiten Dokument bestimmte Inhalte und fügt Teile der String-Variablen ein.
Alle Einzelteile sind mir klar; aber der richtige Aufruf des DispatchHelpers bereitet mir Schwierigkeiten.

Punkt 3 wird im wesentlichen so gelöst ("dest" steht für "Destination"):

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
Jetzt brauche ich Zugriff auf diese Datei. Aber so klappt es nicht:

Code: Alles auswählen

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(destDoc, ".uno:GoToStartOfDoc", "", 0, Array())
Das führt zu folgendem Fehler (der übersteigt meine Englisch-Kenntnisse deutlich):
IllegalArgumentException
Message: cannot coerce argument type during corereflection call!
Alle Beispiele, die ich über die Forumssuche oder im Wiki gefunden habe, greifen immer auf das aktuelle Fenster zu:

Code: Alles auswählen

document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
dispatcher.executeDispatch(document, ... )
Aber das aktuelle Fenster ist doch mein erstes Dokument; mit dem dispatcher will ich auf das zweite Dokument zugreifen. Welcher Typ wird als erstes Argument beim executeDispatch verlangt? Welcher Datentyp wird durch loadComponent zurückgegeben? Wie komme ich von diesem Typ zu dem Doc-Typ für den Dispatcher?

Danke für Hinweise und ggf. Erklärungen! Jürgen

Nach oben