MaKros/Python-Leitfaden/Nützliche Funktionen
< Macros | Python Guide
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Nützliche Funktionen
In vielen in diesem Leitfaden gezeigten Beispielen können wir eine oder mehrere der folgenden Funktionen verwenden.
Instanzen erstellen
import uno
CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
def create_instance(name, with_context=False):
if with_context:
instance = SM.createInstanceWithContext(name, CTX)
else:
instance = SM.createInstance(name)
return instance
Desktop holen
- Ein weg
import uno
desktop = XSCRIPTCONTEXT.getDesktop()
- Instanz erstellen
desktop = create_instance('com.sun.star.frame.Desktop', True)
- Besser für Aufrufe von anderen Makros
def get_desktop():
return create_instance('com.sun.star.frame.Desktop', True)
Dispatch-Aufruf
- Viele Funktionen von LibreOffice können nur mit Dispatch ausgeführt werden
def call_dispatch(doc, url, args=()):
frame = doc.getCurrentController().getFrame()
dispatch = create_instance('com.sun.star.frame.DispatchHelper')
dispatch.executeDispatch(frame, url, '', 0, args)
return
- Zum Beispiel das Kommando copy
doc = XSCRIPTCONTEXT.getDocument()
call_dispatch(doc, '.uno:Copy')
MsgBox
from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS
def msgbox(message, title='LibreOffice', buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='infobox'):
""" Create message box
type_msg: infobox, warningbox, errorbox, querybox, messbox
https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMessageBoxFactory.html
"""
toolkit = create_instance('com.sun.star.awt.Toolkit')
parent = toolkit.getDesktopWindow()
mb = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message))
return mb.execute()
Ausführen in einem anderen Thread
import threading
def run_in_thread(fn):
def run(*k, **kw):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return t
return run
- Nun können Sie jedes Makro in einem anderen Thread ausführen
@run_in_thread
def main():
return
Dictionary zu Eigenschaften
from com.sun.star.beans import PropertyValue
def dict_to_property(values, uno_any=False):
ps = tuple([PropertyValue(Name=n, Value=v) for n, v in values.items()])
if uno_any:
ps = uno.Any('[]com.sun.star.beans.PropertyValue', ps)
return ps
Get color
def get_color(red, green, blue):
color = (red << 16) + (green << 8) + blue
return color