Caricamento di un documento su OpenOffice usando un programma Python esterno

StackOverflow https://stackoverflow.com/questions/2153843

  •  23-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare un programma Python (usando pyUNO) di apportare alcune modifiche su un foglio di Calc di OpenOffice.

Ho lanciato in precedenza OpenOffice in modalità "accettare" di essere in grado di connettersi da un programma esterno. A quanto pare, dovrebbe essere facile come:

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

Ma ottengo un AttributeError quando provo ad accedere loadComponentFromURL. Se faccio un dir(DESKTOP), ho visto solo i seguenti attributi / metodi:

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

Ho letto che ci sono in cui un bug fare lo stesso, ma su OpenOffice 3.0 (sto usando OpenOffice 3.1 su Red Hat5.3). Ho cercato di utilizzare la soluzione indicata qui , ma non sembra di essere al lavoro.

Tutte le idee?

Altri suggerimenti

E 'stato molto tempo da quando ho fatto nulla con PyUNO, ma guardando il codice che ha lavorato l'ultima volta mi sono imbattuto di nuovo nel '06, ho fatto il mio documento di carico in questo modo:

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

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

Il vostro esempio è una versione semplificata, e non sono sicuro se hai rimosso gli argomenti extra intenzionalmente o non intenzionalmente.

Se loadComponentFromURL non c'è, allora l'API è cambiato o c'è qualcosa che non va, ho letto attraverso il codice e sembra che si sta facendo le stesse cose che ho.

Non credo che il dir () dei metodi sull'oggetto del desktop sarà utile, come io credo che ci sia un metodo __getattr__ utilizzato per procura attraverso le richieste, e tutti i metodi che avete stampate fuori sono di utilità metodi utilizzati per l'oggetto stand-in per il com.sun.star.frame.Desktop.

Credo che forse il fallimento potrebbe essere che non c'è nessun metodo denominato loadComponentFromURL che ha esattamente 1 argomento. Forse dando la versione 4 argomento si tradurrà nel metodo viene trovato e utilizzato. Questo potrebbe essere semplicemente un disadattamento di impedenza tra Python e Java, dove Java ha chiamata al metodo-firma sovraccarico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top