LibreOffice 7.6 žinynas
„LibreOffice Python“ skriptai yra trijų skirtingų rūšių, jie gali būti asmeniniai, bendrinami ar įterpti į dokumentus. Jie laikomi skirtingose vietose, aprašytose „Python“ skriptų organizavimas ir vieta . Norint importuoti „Python“ modulius, vykdymo metu iš „Python“ turi būti žinomos jų vietos.
Šis mechanizmas iliustruojamas failų sistemos moduliais ir dokumentais pagrįstais moduliais. Dėl aiškumo išimtys neaptariamos. Sąvokos biblioteka ar katalogas, skriptai ar moduliai vartojami pakaitomis. „Python“ makrokomanda reiškia funkciją modulio viduje.
Pastebėkite, kad <User Profile>/Scripts/python/pythonpath lokalus aplankas visuomet tyrinėjams, kai vykdoma „Python“ makrokomanda naudojant <User Profile>/Scripts/python.
Asmeninius ir bendrinamus „Python“ skriptus galima importuoti, kai jų katalogai bus įtraukti į „Python“ vykdymo kelią. Daugiau informacijos apie praleistą „Session Class“ rasite tinklalapyje Seanso informacijos gavimas.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Vartotojo skriptų vieta
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Pridėti ieškomą kelią
import screen_io as ui # 'screen_io.py' modulis yra user_lib kataloge
# Jūsų kodas eina čia
Šis „Python“ pavyzdys pateikia vietinį XSCRIPTCONTEXT kintamąjį importuotam moduliui:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Bendrinamų skriptų vieta
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Pridėti ieškomą kelią
iš IDE_utils import ScriptContext # 'IDE_utils.py' eina su bendrinamu „Python“ scriptu.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Jūsų kodas eina čia
Skirtingai nuo asmeninių ir bendrinamų scenarijų, „%{PRODUCTNAME}“ diegimo skriptus galima importuoti bet kuriuo metu. Šalia uno & unohelper „LibreOffice Python“ modulių galima tiesiogiai importuoti kitus skriptus, esančius kataloge <installation_path>/program, pvz., kaip šio msgbox modulio.
Esant „Python“ apvakalui
>>> 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"))
Toliau pavaizduotas įterptojo „Python“ dokumento modulio importavimas. Klaidų tvarkymas nėra išsamus. „Python“ vykdymo kelias atnaujinamas atvėrus dokumentą ir prieš jį užveriant. Norėdami sužinoti, kaip susieti „Python“ makrokomandas su dokumentų įvykiais, žr. Įvykiais valdomos makrokomandos.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Paruoškite „Python“ modulių importavimą, kai doc. įkraunamas """
PythonLibraries.loadLibrary('lib/subdir') # Ieškomam keliui pridėti katalogą
PythonLibraries.loadLibrary('my_gui', 'screen_io') # Pridėti dir. & import screen_io
def OnDocQueryCloseUnloadPython():
""" Išvalykite PYTHON_PATH, kai doc. užveriamas """
PythonLibraries.unloadLibrary('my_gui') # Python vykdymo kelio valymas
# Pastaba: šiame pavyzdyje importuoti moduliai lieka įkelti.
class PythonLibraries():
"" "" Python bibliotekos įkrovimo programa ir modulių importuvas
'Bibliothèque de fonctions' adaptavo Hubert Lambert
Prieiga: https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Patikrinkite vykdymo laiko modulių sąrašą """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Patikrinkite PYTHON_PATH turinį """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" pridėti katalogą prie PYTHON_PATH, importuoti įvardintą 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):
""" pašalinti katalogą iš PYTHON_PATH """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)