Pomoc za LibreOffice 25.2
Skripty Python LibreOffice su w třoch rozdźělnych wariantach: móža priwatne, zhromadnje wužite abo do dokumentow zasadźene być. Składuja so na rozdźělnych městnach, kotrež so w Organizacija a městno skriptow Python wopisuja. Zo bychu so module Python importowali, dyrbja jich městna za čas fungowanja znate być.
Tutón mechanizm so za module zwobraznjuje, kotrež na datajowym systemje a dokumenće bazuja. Wobchadźenje z wuwzaćemi je přehladnosće dla wuwostajene. Zapřijeće biblioteka abo zapis, skripty abo module so synonymnje wužiwaja. Makro Python so na funkciju znutřka modula poćahuje.
Dźiwajće na to, zo so lokalny zapis <User Profile>/Scripts/python/pythonpath přeco přepytuje, hdyž so makro Python z <User Profile>/Scripts/python wuwjedźe.
Priwatne a zhromadnje skripty Python dadźa so importować, hdyž jich zapisy so do šćežki časa fungowanja Python zapřijate. Za dalše informacije wo wuwostajenych posedźenskich klasach hlejće stronu Posedźenske informacije wotwołać.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Městno wužiwarskich skriptow
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Pytanskej šćežce přidać
import screen_io as ui # modul 'screen_io.py' je w zapisu user_lib directory
# Waš kod tu slěduje
Tutón přikład Python importowanemu modulej lokalnu wariablu XSCRIPTCONTEXT k dispoziciji staja
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Městno zhromadnje wužitych skriptow
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Pytanskej šćežce přidać
from IDE_utils import ScriptContext # 'IDE_utils.py' zhromadnje skripty Python wobsahuje.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Waš kod tu slěduje
Na rozdźěl wot priwatnych a zhromadnje wužitych skriptow dadźa so instalaciske skripty LibreOffice kóždy čas importuja. Nimo modulow Python LibreOffice uno a unohelper dadźa so druhe skripty w zapisu <installation_path>/program direktnje importować, 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"))
Importowanje modula Python, kotryž je w dokumenće zasadźeny, so deleka zwobraznjuje. Wobchadźenje ze zmylkami so njewopisuje. Šćežka čas fungowanja Python so aktualizuje, hdyž dokument je wočinjeny a do začinjenja. Za dalše informacije hlejće Přez podawki wodźene makra, zo byšće zhonił, kak móžeće makra Python z dokumentowymi podawkami zwjazać.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Import modulow Python přihotować, hdyž so doc. začituje """
PythonLibraries.loadLibrary('lib/subdir') # Pytanskej šćežce zapis přidać
PythonLibraries.loadLibrary('my_gui', 'screen_io') # dir. & import screen_io přidać
def OnDocQueryCloseUnloadPython():
""" PYTHON_PATH porjedźić, hdyž so doc. začinja """
PythonLibraries.unloadLibrary('my_gui') # Šćežku časa fungowanja Python porjedźić
# Pokazka: importowane module w tutym přikładźe začitane wostawaja.
class PythonLibraries():
""" Wočinjak bibliotekow Python a importowak modulow
adaptowany wot 'Bibliothèque de fonctions' wot Hubert Lambert
na https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Lisćinu modulow časa fungowanja přepruwować """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Wobsah PYTHON_PATH přepruwować """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" PYTHON_PATH zapis přidać, pomjenowany modul importować """
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 wotstronić """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)