Я пытаюсь создать программу Python (использующий pyUNO) для внесения некоторых изменений на OpenOffice calc листом.
Я запустился ранее, 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
. Если я делаю a 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 по Красному Hat5.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
Это было долгое время, так как я сделал что-нибудь с Pyuno, но глядя на код, который работал в прошлый раз, я запустил его в '06, я сделал свой документ нагрузки:
def urlify(path):
return uno.systemPathToFileUrl(os.path.realpath(path))
desktop.loadComponentFromURL(
urlify(tempfilename), "_blank", 0, ())
Ваш пример представляет собой упрощенную версию, и я не уверен, что вы убрали дополнительные аргументы преднамеренно или не намеренно.
Если loadcomponentfromurl нет, то API изменился или что-то еще неверно, я прочитал ваш код, и он выглядит так, будто вы делаете все то же самое.
Я не верю, что DIR () методов на настольном объекте будет полезен, так как я думаю, что есть метод __thattr __
, используемый для прокси через запросы, и все методы, которые вы Распечатываемые методы коммунальных услуг, используемые для объекта в режиме ожидания для com.sun.star.frame.desktop
.
Я думаю, что, возможно, неудача может быть, что нет метода по имени LeadComponentFromurl, который имеет ровно 1 аргумент. Возможно, предоставление 4-го аргумента версии приведет к найду и использованному методу. Это может быть просто несоответствие импеданса между Python и Java, где Java имеет перегрузку метода подписи вызовов.