Loading a document on OpenOffice using an external Python program

python, pyuno

Solution

This looks like issue 90701: http://www.openoffice.org/issues/show_bug.cgi?id=90701

See also http://piiis.blogspot.com/2008/10/pyuno-broken-in-ooo-30-with-system.html and http://udk.openoffice.org/python/python-bridge.html

Problem

I'm trying to create a python program (using pyUNO ) to make some changes on a OpenOffice calc sheet. I've launched previously OpenOffice on "accept" mode to be able to connect from an external program. Apparently, should be as easy as: ``` import uno # get the uno component context from the PyUNO runtime localContext = uno.getComponentContext() # create the UnoUrlResolver resolver = localContext.ServiceManager.createInstanceWithContext( "com.sun.star.bridge.UnoUrlResolver", localContext) # connect to the running office ctx = resolver.resolve("uno:socket,host=localhost,port=2002;" "urp;StarOffice.ComponentContext") smgr = ctx.ServiceManager # get the central desktop object DESKTOP =smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) #The calling it's not exactly this way, just to simplify the code DESKTOP.loadComponentFromURL('file.ods') ``` But I get an `AttributeError` when I try to access `loadComponentFromURL`. If I make a `dir(DESKTOP)`, I've see only the following attributes/methods: ``` ['ActiveFrame', 'DispatchRecorderSupplier', 'ImplementationId', 'ImplementationName', 'IsPlugged', 'PropertySetInfo', 'SupportedServiceNames', 'SuspendQuickstartVeto', 'Title', 'Types', 'addEventListener', 'addPropertyChangeListener', 'addVetoableChangeListener', 'dispose', 'disposing', 'getImplementationId', 'getImplementationName', 'getPropertySetInfo', 'getPropertyValue', 'getSupportedServiceNames', 'getTypes', 'handle', 'queryInterface', 'removeEventListener', 'removePropertyChangeListener', 'removeVetoableChangeListener', 'setPropertyValue', 'supportsService'] ``` I've read that there are where a bug doing the same, but on OpenOffice 3.0 (I'm using OpenOffice 3.1 over Red Hat5.3). I've tried to use the workaround stated here, but they don't seems to be working. Any ideas?

Original source