Wie erhalte ich das geöffnete Dokument mit UNO?

Ich schreibe ein Add-On, das einen Dialog öffnet, und ich muss auf das aktuell geöffnete Textdokument zugreifen, weiß aber nicht, wie ich darauf zugreifen soll.

Ich verwende das OpenOffice-Plug-In in NetBeans und habe von einem Add-On-Projekt aus begonnen. Es wurde eine Klasse erstellt, die mir eine XComponentContext-Instanz gibt, aber ich weiß nicht, wie ich damit eine OfficeDocument-Instanz des aktuellen Dokuments abrufen kann.

Ich habe einige Zeit gegoogelt und kann kein Beispiel finden, das ein vorhandenes, geöffnetes Dokument verwendet. Sie beginnen alle mit einem neuen Dokument oder einem Dokument, das zuerst geladen wird, sodass sie eine URL dafür haben.

Ich habe es ausprobiert, basierend auf dem OpenOffice-Wiki https: //wiki.openoffice.org/wiki/API/Samples/Java/Office/DocumentHandlin) und das habe ich mir ausgedacht:

private OfficeDocument getDocument() {
  if (this.officeDocument == null) {
    try {
        // this causes the error
        XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();

        Object oDesktop = xMultiComponentFactory.createInstanceWithContext("com.sun.star.frame.Desktop", this.xComponentContext);
        XComponentLoader xComponentLoader = UnoRuntime.queryInterface(XComponentLoader.class, oDesktop);

        String url = "private:factory/swriter";
        String targetFrameName = "_self";
        int searchFlags = FrameSearchFlag.SELF;
        PropertyValue[] propertyValues = new PropertyValue[1];
        propertyValues[0] = new PropertyValue();
        propertyValues[0].Name = "Hidden";
        propertyValues[0].Value = Boolean.TRUE;

        XComponent xComponent = xComponentLoader.loadComponentFromURL(url, targetFrameName, searchFlags, propertyValues);

        XModel xModel = UnoRuntime.queryInterface(XModel.class, xComponent);
        this.officeDocument = new OfficeDocument(xModel);
    } catch (com.sun.star.uno.Exception ex) {
        throw new RuntimeException(ex);
    }
  }
  return this.officeDocument;
}

Aber da ist etwas seltsames los. Nur mit dieser Methode in meiner Klasse,even wenn es noch nie irgendwo genannt wurde, verursacht einen Fehler beim Hinzufügen des Add-Ons.

(com.sun.star.depoyment.DeploymentDescription){{ Message = "Error during activation of: VaphAddOn.jar", Context = (com.sun.star.uno.XInterface) @6ce03e0 }, Cause = (any) {(com.sun.star.registry.CannotRegisterImplementationException){{ Message = "", Context = (com.sun.star.uno.XInterface) @0 }}}}

Es scheint, dass diese Zeile den Fehler verursacht:

XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();

ch habe keine Ahnung, wie ich vorgehen sol

Ich habe diese Frage auf dem @ geposteOpenOffice Forum aber ich habe dort keine antwort bekommen. Ich versuche mein Glück hier jetzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage