我正在尝试创建一个 python 程序(使用 pyUNO )来对 OpenOffice 计算表进行一些更改。

我之前已在“接受”模式下启动 OpenOffice,以便能够从外部程序进行连接。显然,应该很简单:

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

但我得到一个 AttributeError 当我尝试访问时 loadComponentFromURL. 。如果我做一个 dir(DESKTOP), ,我只看到以下属性/方法:

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

我读到有一个错误在 OpenOffice 3.0 上执行相同的操作(我使用的是 OpenOffice 3.1 而不是 Red Hat5.3)。我尝试使用所述的解决方法 这里, ,但它们似乎不起作用。

有任何想法吗?

其他提示

以来,它一直我做了什么PyUNO很长一段时间,但看着那工作,我跑了回来06年最后一次的代码,我做我的负荷文件是这样的:

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

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

您的例子是一个简化的版本,我不知道你是否已经删除了额外的参数是有意还是无意故意。

如果loadComponentFromURL的是不存在的,那么API已更改,或者还有别的东西错了,我已经通过您的代码阅读,它看起来像你正在做的一切我也有同样的事情。

我不相信的桌面对象的方法迪尔()是有用的,因为我觉得有通过请求被用来代理一个__getattr__方法,和所有你已经打印出来的方法是实用用于替身对象为com.sun.star.frame.Desktop方法。

我想也许失败可能是因为没有名为loadComponentFromURL方法时刚好有1说法。也许给4参数版本将导致该方法的发现和使用。这可能仅仅是Python和Java,其中Java有呼叫的签名方法重载之间的阻抗失配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top