Pomoč Collabora Office 24.04
Skripti Python v Collabora Office so treh različnih vrst: lahko so osebni, v skupni rabi ali vdelani v dokumente. Shranjeni so na različnih mestih, opisanih v Organizacija in mesto skriptov v Pythonu. Da bi uvozili module Python, morajo biti njihova mesta znana iz Pythona v času izvajanja.
Ta mehanizem je ponazorjen za datotečni sistem, ki temelji na modulih in na dokumentih temelječih modulih. Obravnavanje izjem je zaradi jasnosti izpuščeno. Izraza knjižnica ali mapa, skripte ali moduli so zamenljivo uporabljeni. Makro Python se nanaša na funkcijo znotraj modula.
Upoštevajte, da je krajevna mapa <Uporabniški profil>/Scripts/Python/pythonpath vedno preiskana, ko zaganjate makro Python iz <Uporabniški profil>/Scripts/Python.
Osebni in skupni skripti Python lahko uvozite, ko so njihove mape vključene v zagonsko pot Pythona. Glejte stran Pridobivanje informacij o sejiza podrobnosti o izpuščenem razredu Session.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Mesto skriptov uporabnika
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Dodaj v pot iskanja
import screen_io as ui # Modul ‘screen_io. py ' prebiva v mapi user_lib
# Tukaj sledi vaša koda
Ta primer Python izpostavi lokalno spremenljivko XSCRIPTCONTEXT uvoznemu modulu:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Mesto skriptov v skupni rabi
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Dodaj v iskalno pot
from IDE_utils import ScriptContext # "IDE_utils. py" sedi s skupnimi skripti Python.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Tukaj sledi vaša koda
Za razliko od osebnih in v skupnih skriptov lahko skripte za namestitev Collabora Office uvozite kadar koli. Poleg modulov Collabora Office Python uno in unohelper lahko druge skripte iz mape <pot_namestitve>/program uvozite neposredno, kot npr. modul msgbox.
V lupini Pythona:
>>> 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"))
Uvažanje v dokument vdelanega modula Python je prikazano spodaj. Obravnavanje napak ni podrobno opisano. Pot izvajanja Pythona je posodobljena, ko je dokument odprt in preden ga zapremo. Če želite izvedeti, kako povezati makre Python za dokumentiranje dogodkov, glejte makre, ki temeljijo na dogodku.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Pripravi uvoz modulov Python, ko se naloži dokument """
PythonLibraries.loadLibrary('lib/subdir') # Dodaj mapo v iskalno pot
PythonLibraries.loadLibrary('my_gui', 'screen_io') # Dodaj mapo in uvozi screen_io
def OnDocQueryCloseUnloadPython():
""" Počisti PYTHON_PATH, ko se dok. zapre """
PythonLibraries.unloadLibrary(‘my_gui’) # Čiščenje poti izvajanja Pythona
# Opomba: uvoženi moduli ostanejo v tem primeru naloženi.
class PythonLibraries():
""" Nalagalnik knjižnic in uvoznik modulov Python
prirejeno po »Bibliothèque de fonctions« avtorja Huberta Lamberta
na naslovu https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Preveri seznam modulov ob izvajanju """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Preveri vsebino PYTHON_PATH """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" Dodaj mapo v PYTHON_PATH, uvozi imenovani modul """
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):
""" Odstrani mapo iz PYTHON_PATH """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)