Я подтвердил, что могу запускать как обычные офисные макросы, так и макросы Python изнутри офиса, но я до сих пор не понял, как запустить один (даже hello world) из командной строки.
Я погуглил и посмотрел здесь другие ответы, но мне все еще не совсем понятно, как запустить макрос открытого офиса из командной строки:
https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=8232 предлагает использовать:
office writer.odt "macro://Standard.Module1.Macro1()"
Я также видел:
office "macro://Standard.Module1.Macro1()"
writer.odt
В любом случае это просто открывает документ и не запускает макрос и не сообщает об ошибке.
В то время как как вызвать существующий Python LibreOffice макрос из скрипта Python предлагает запустить офисное прослушивание порта и общаться через него.
Если я смогу зайти так далеко, мне все равно нужно найти документацию по API, которая объяснит, как вставить якорь (в соответствии с моим другим вопросом asciidoc: есть ли способ создать привязку, которая будет видна в libreoffice writer?)
Я использую RHEL7 для контекста.
обновить
oowriter "foo.odt" macro:///Standard.Module1.addXref
работает с офисным базовым макросом. Я до сих пор не разобрался с питоном.
Одна проблема в том, что я не могу найти какую-либо отладочную информацию, на которую можно было бы посмотреть. Есть ли где-нибудь файлы журналов?
Другой вопрос - какую версию Python использовать. Пакет RHEL устанавливает пакеты сайта для python 2.7.
>rpm -q --whatprovides /usr/bin/writer libreoffice-writer-4.3.7.2-5.el7_2.1.x86_64 >rpm -ql libreoffice-pyuno-4.3.7.2-5.el7_2.1 ... /usr/lib64/python2.7/site-packages/uno.py
Libreoffice5.1 включает 3.5 с дистрибутивом:
>/opt/libreoffice5.1/program/python --version
Python 3.5.0
Итак, для начала я ищу пример python hello world, который объединяет известную версию python с известной версией office. Предпочтительно любой из двух вышеупомянутых (писатель 4.3.7 и python 2.7? Или писатель 5.1 и python 3.5).
update2
Используя python3.5, установленный с office5.1, у меня есть рабочий hello world, используя следующее:
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)
# access the current writer document
model = desktop.getCurrentComponent()
# access the document's text property
text = model.Text
# create a cursor
cursor = text.createTextCursor()
# insert the text into the document
text.insertString( cursor, "Hello World", 0 )
Это работает с любой версией открытого офиса через:
/usr/bin/oowriter --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Итак, последняя часть - добавить перекрестную ссылку.