Pomoc za LibreOffice 25.2
Daju skripty Python LibreOffice w tśich rozdźělnych wariantach: mógu priwatne, zgromadnje wužyte abo do dokumentow zasajźone byś. Składuju se na rozdźělnych městnach, kótarež se w Organizacija a městno skriptow Python wopisuju. Aby se module Python importěrowali, muse jich městna za cas wužywanja znate byś.
Toś ten mechanizm se za module znaglědnja, kótarež na datajowem systemje a dokumenśe bazěruju. Wobchad z wuwześami jo pśeglědnosći dla wuwóstajone. Zapśimjeśe biblioteka abo zapis, skripty abo module se synonymnje wužywaju. Makro Python se na funkciju w modulu póśěgujo.
Źiwajśo na to, až se lokalny zapis <User Profile>/Scripts/python/pythonpath pśecej pśepytujo, gaž se makro Python z <User Profile>/Scripts/python wuwjeźo.
Wósobinske a zgromadnje skripty Python daju se importěrowaś, gaž jich zapise se do sćažki casa wužywanja Python zapśimjete. Za dalšne informacije wó wuwóstajonych pósejźeńskich klasach glejśo bok Pósejźeńske informacije wótwołaś.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Městno wužywaŕskich skriptow
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Pytańskej sćažce pśidaś
import screen_io as ui # modul 'screen_io.py' jo w zapisu user_lib directory
# Waš kod how slědujo
Toś ten pśikład Python importěrowanemu moduloju lokalnu wariablu XSCRIPTCONTEXT k dispoziciji staja
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Městno zgromadnje wužytych skriptow
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Pytańskej sćažce pśidaś
from IDE_utils import ScriptContext # 'IDE_utils.py' zgromadnje skripty Python wopśimujo.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Waš kod how slědujo
Na rozdźěl wót wósobinskich a zgromadnje wužytych skriptow daju se instalaciske skripty LibreOffice kuždy cas importěruju. Mimo modulow Python LibreOffice uno a unohelper daju se druge skripty w zapisu <installation_path>/program direktnje importěrowaś, na pśikład modul msgbox.
Z konsolu Python:
>>> import msgbox, uno
>>> myBox = msgbox.MsgBox(uno.getComponentContext())
>>> myBox.addButton("okay")
>>> myBox.renderFromButtonSize()
>>> myBox.numberOflines = 2
>>> print(myBox.show("A small message",0,"Dialog title"))
Importěrowanje modula Python, kótaryž jo w dokumenśe zasajźony, se dołojce znaglědnja. Wobchad ze zmólkami se njewopisujo. Sćažka cas wužywanja Python se aktualizěrujo, gaž dokument jo wócynjony a do zacynjanja. Za dalšne informacije glejśo Přśztšojenja wóźone makra, aby zgónił, kak móžośo makra Python z dokumentowymi tšojenjami zwězaś.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Import modulow Python pśigótowaś, gaž se doc. zacytujo """
PythonLibraries.loadLibrary('lib/subdir') # Pytańskej sćažce zapis pśidaś
PythonLibraries.loadLibrary('my_gui', 'screen_io') # dir. & import screen_io pśidaś
def OnDocQueryCloseUnloadPython():
""" PYTHON_PATH pórěźiś, gaž se doc. zacynja """
PythonLibraries.unloadLibrary('my_gui') # Sćažku casa wužywanja Python pórěźiś
# Pokazka: importěrowane module w toś tom pśikłaźe zacytane wóstawaju.
class PythonLibraries():
""" Wótcynjak bibliotekow Python a importěrowak modulow
adaptěrowany wót 'Bibliothèque de fonctions' wót Hubert Lambert
na https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Lisćinu modulow casa wužywanja pśeglědowaś """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Wopśimjeśe PYTHON_PATH pśeglědowaś """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" PYTHON_PATH zapis pśidaś, pomjenjony modul importěrowaś """
doc = XSCRIPTCONTEXT.getDocument()
url = uno.fileUrlToSystemPath(
'{}/{}'.format(doc.URL,'Scripts/python/'+lib_name)
if not url in sys.path:
sys.path.insert(0, url)
if module_name and not module_name in sys.modules.keys():
return zipimport.zipimporter(url).load_module(module_name)
def unloadLibrary(lib_name: str):
""" zapis z PYTHON_PATH wótwónoźeś """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)