Page 1 of 1

How to get the opened document?

PostPosted: Tue Sep 15, 2015 10:29 am
by koohoolinn
I'm writing an add-on that opens a dialog and I need to access the currently opened text document but I don't know how get it.

I'm using the OpenOffice plug-in in NetBeans and I started from an Add-on project. It created a class that gives me a XComponentContext instance but I don't know how to use it to get a OfficeDocument instance of the current document.

I've been googling for some time and I can't find any example that uses an existing, opened, document. They all start from a new document or a document that is loaded first so they have an URL for it.

Can you help me? Or ath least point me in the right direction?

Re: How to get the opened document?

PostPosted: Tue Sep 15, 2015 10:33 am
by RoryOF
Is it not in

Getting a remote office component context

The method initializes UNO and returns the remote component context of a runing process. xContext = null;
xContext =;

does what you ned?

Re: How to get the opened document?

PostPosted: Tue Sep 15, 2015 2:54 pm
by koohoolinn
I got a bit further but I have no idea if it's OK:
Code: Select all   Expand viewCollapse view
private OfficeDocument getDocument() {
    if (this.officeDocument == null) {
        try {
            // this causes the error
            XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();

            Object oDesktop = xMultiComponentFactory.createInstanceWithContext("", 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 ( ex) {
            throw new RuntimeException(ex);
    return this.officeDocument;

When I try to add the extension, I get following error:
({{ Message = "Error during activation of: VaphAddOn.jar", Context = ( @6ce03e0 }, Cause = (any) {({{ Message = "", Context = ( @0 }}}}

This line causes the error:
Code: Select all   Expand viewCollapse view
XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();

The weird thing is that it's code that's in a private method that isn't called anywhere yet. Still it fails. :?

Any ideas?

Re: How to get the opened document?

PostPosted: Tue Sep 15, 2015 3:13 pm
by koohoolinn
Hmm, when I click 'OK' on the error dialog, the add-on seems to be activated anyway. The test messages I put in my code appear in the output.

CORRECTION: it seems an old version is installed somehow. Newer messages do not appear.