Загрузка документа о OpenOffice с помощью внешней программы Python

Я пытаюсь создать программу 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). Я попытался использовать обходное решение, указанное здесь, но они не делают, кажется, работает.

Какие-либо идеи?

6
задан Khelben 28 January 2010 в 10:41
поделиться

2 ответа

Это было долгое время, так как я сделал что-нибудь с 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 имеет перегрузку метода подписи вызовов.

4
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: