6

OpenOffice calc シートにいくつかの変更を加えるために、( pyUNO を使用して) python プログラムを作成しようとしています。

外部プログラムから接続できるように、以前に「受け入れ」モードで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 (私は Red Hat5.3 で OpenOffice 3.1 を使用しています) で同じことをしているバグがあることを読みました。ここに記載されている回避策を使用しようとしましたが、機能していないようです。

何か案は?

4

2 に答える 2

4

私が PyUNO で何かをしたのは久しぶりですが、2006 年に前回実行したときに機能したコードを見て、次のようにロード ドキュメントを実行しました。

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

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

あなたの例は単純化されたバージョンであり、余分な引数を意図的に削除したのか、意図的に削除したのかはわかりません。

loadComponentFromURL が存在しない場合は、API が変更されているか、何か問題があります。コードを読んだところ、私と同じことをしているように見えます。

デスクトップオブジェクトのメソッドの dir() が役立つとは思わない__getattr__.リクエストを介してプロキシするために使用されているメソッドがあり、あなたが印刷したすべてのメソッドはの代用オブジェクトcom.sun.star.frame.Desktop

おそらく、正確に1つの引数を持つloadComponentFromURLという名前のメソッドがないことが失敗の原因であると思います。おそらく、4 つの引数のバージョンを指定すると、メソッドが検出されて使用されることになります。これは単に Python と Java の間のインピーダンスの不一致である可能性があり、Java には call-signature メソッドのオーバーロードがあります。

于 2010-02-02T01:15:41.667 に答える
3

これは問題 90701 のようです: http://www.openoffice.org/issues/show_bug.cgi?id=90701

http://piiis.blogspot.com/2008/10/pyuno-broken-in-ooo-30-with-system.htmlおよびhttp://udk.openoffice.org/python/python-bridge.htmlも参照してください。

于 2010-03-04T16:39:52.083 に答える