Pregunta

Estoy intentando crear un programa Python (usando PyUNO) para hacer algunos cambios en una hoja de OpenOffice Calc.

he lanzado previamente OpenOffice en el modo de "aceptar" para poder conectar desde un programa externo. Al parecer, debería ser tan fácil como:

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') 

Pero consigo un AttributeError cuando intento acceder loadComponentFromURL. Si hago un dir(DESKTOP), he visto sólo los siguientes atributos / métodos:

['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']

He leído que hay un error en hacer lo mismo, pero en OpenOffice 3.0 (estoy usando OpenOffice 3.1 sobre Red Hat5.3). He tratado de utilizar la solución indicada aquí , pero no parece estar funcionando.

¿Alguna idea?

Otros consejos

Ha pasado mucho tiempo desde que hice nada con PyUNO, pero mirando el código que funcionó la última vez que me encontré de nuevo en el '06, hice mi documento de carga como esto:

def urlify(path):
     return uno.systemPathToFileUrl(os.path.realpath(path))

desktop.loadComponentFromURL(
        urlify(tempfilename), "_blank", 0, ())

Su ejemplo es una versión simplificada, y no estoy seguro de si usted ha quitado los argumentos adicionales intencional o no intencionalmente.

Si loadComponentFromURL no está allí, a continuación, la API ha cambiado o hay algo más equivocado, he leído a través de su código y parece que estás haciendo las mismas cosas que tengo.

No creo que la dir () de los métodos en el objeto de escritorio será útil, ya que creo que es un método que se utiliza para __getattr__ representación a través de las solicitudes, y todos los métodos que ha imprime son de utilidad métodos utilizados para el sustituto de objeto para el com.sun.star.frame.Desktop.

Creo que tal vez el fallo podría ser que no hay método denominado loadComponentFromURL que tiene exactamente 1 argumento. Quizás dando la versión 4 argumento se traducirá en el método que se encontró y se utiliza. Esto podría ser simplemente una falta de concordancia entre Python y Java, donde Java tiene llamada de método en firmas sobrecarga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top