Frage

Ich versuche, ein Python-Programm (mit PyUNO) zu schaffen, um einige Änderungen an einer Openoffice Calc-Tabelle zu machen.

Ich habe gestartet zuvor Openoffice auf „Akzeptieren“ -Modus, um von einem externen Programm zu verbinden. Offenbar sollte so einfach wie:

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

Aber ich eine AttributeError, wenn ich den Zugriff auf loadComponentFromURL versuchen. Wenn ich einen dir(DESKTOP) machen, habe ich sehe nur die folgenden Attribute / Methoden:

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

Ich habe gelesen, dass es, wo ein Fehler das gleiche zu tun, aber auf Openoffice 3.0 (ich Openoffice 3.1 über Red Hat5.3 verwenden). Ich habe versucht, die Abhilfe zu verwenden angegeben hier , aber sie nicht scheint zu arbeiten.

Irgendwelche Ideen?

Andere Tipps

Es ist schon lange her, ich habe etwas mit PyUNO, aber Blick auf den Code, das letzte Mal war ich es lief zurück in '06, ich habe meine Last Dokument wie folgt aus:

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

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

Ihr Beispiel ist eine vereinfachte Version, und ich bin nicht sicher, ob Sie die zusätzlichen Argumente absichtlich oder nicht absichtlich entfernt haben.

Wenn loadComponentFromURL nicht da ist, dann ist die API geändert hat oder es ist etwas anderes falsch, ich habe Ihren Code lesen und es sieht aus wie Sie alle die gleichen Dinge tun ich habe.

Ich glaube nicht, dass die dir () die Methoden auf dem Desktop-Objekt von Nutzen sein wird, wie ich denke, es gibt eine __getattr__ Methode Proxy durch die Anforderungen verwendet werden, und alle Methoden, die Sie ausgedruckt haben, sind Dienstprogramm für den Stand-in Objektmethoden für die com.sun.star.frame.Desktop verwendet.

Ich denke, vielleicht könnte der Fehler sein, dass es keine Methode namens loadComponentFromURL, die genau 1 Argument hat. Vielleicht gibt die 4 Argument Version in dem Verfahren führen wird gefunden und genutzt werden. Dies könnte einfach eine Impedance Mismatch zwischen Python und Java, wo Java Call-Signaturverfahren Überlastung hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top