Ich habe verifiziert, dass ich sowohl normale Office - als auch Python - Makros aus dem Büro ausführen kann, aber ich habe noch nicht herausgefunden, wie man einen ausführt die Hallo Welt eins) von der Kommandozeile.libreoffice - run (python) Makro zum Einfügen eines Querverweises von der Gnu/Linux Kommandozeile
Ich habe bei anderen Antworten hier gegoogelt und gesucht, aber ich bin immer noch nicht ganz klar, wie ein offenes Büro Makro von der Kommandozeile ausgeführt werden:
https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=8232 schlägt vor, zu verwenden:
office writer.odt "macro://Standard.Module1.Macro1()"
ich habe auch gesehen:
office "macro://Standard.Module1.Macro1()"
writer.odt
In jedem Fall öffnet dies das Dokument und führt weder ein Makro aus noch meldet es einen Fehler.
Während How to call an existing LibreOffice python macro from a python script schlägt vor, Büro auf einem Hafen zu hören hören und über das kommunizieren.
Wenn ich so weit kommen muss ich noch API-Dokumentation finden, die erklären, wie man einen Anker einzufügen (wie pro meine andere Frage asciidoc: is there a way to create an anchor that will be visible in libreoffice writer?)
I RHEL7 bin mit für Kontext.
Update
oowriter "foo.odt" macro:///Standard.Module1.addXref
arbeitet mit einem Büro-Makro. Ich habe immer noch nicht den Python herausgefunden.
Ein Problem ist, dass ich keine Debug-Informationen finden kann. Gibt es irgendwo Logdateien?
Ein anderes Problem ist, welche Version von Python verwendet werden soll. Das RHEL-Paket installiert Site-Pakete für 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 enthält 3.5 mit dem Distro:
>/opt/libreoffice5.1/program/python --version Python 3.5.0
So beginnt mit mir für ein Hallo Welt Python Beispiel suche, dass Paare eine bekannte Version von Python mit einer bekannten Version Büro. Vorzugsweise einer der beiden oben (Writer 4.3.7 & Python 2.7? Oder Writer 5.1 & Python 3.5).
update2
Mit python3.5 als mit office5 installiert.1 Ich habe eine Arbeits Hallo Welt mit dem folgenden:
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)
Dies funktioniert mit jeder Version von Open Office über:
/usr/bin/oowriter --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
So ist der letzte Teil ist den Querverweis hinzuzufügen.
oowriter "foo.odt" Makro: ///Standard.Module1.addXref arbeitet mit einem Office-Basismakro. –
Das 'coool'-Skript, mit dem verlinkt wird (http://stackoverflow.com/questions/37611030/how-do-i-check-for-broken-internal-links-in-star-basic), ist interessant, tut es aber nicht Geben Sie an, welche Version von Python verwendet werden soll. Es ist nicht 2.7.5 und nicht 3.x –
Um das 'coool'-Skript zum Laufen zu bringen, habe ich den Code heruntergeladen, das' configparse'-Zeug auskommentiert und für die Verwendung von Python 3-Bibliotheken aktualisiert. Es hat ungefähr eine Stunde gedauert. –