Ajuda del LibreOffice 24.8
Els scripts del LibreOffice Python tenen tres comportaments diferents , poden ser personals, compartits o, incrustats en documents. S'emmagatzemen en llocs variables descrits a Organització i ubicació dels scripts Python. Per importar mòduls Python la seua ubicació s'ha de conèixer a Python en temps d'execució.
Aquest mecanisme s'il·lustra per als mòduls basats en el sistema de fitxers i mòduls basats en documents. S'omet la gestió d'excepcions per facilitar-ne la claredat. Els termes biblioteca o directori, scripts o mòduls s'utilitzen indistintament. Una macro de Python fa referència a una funció dins d'un mòdul.
Tingueu en compte que el directori local <User Profile>/Scripts/python/pythonpath sempre s'explora quan s'executa una macro Python des de <User Profile>/Scripts/python.
Els scripts personals i compartits de Python es poden importar un cop s'incloguen els directoris al camí de temps d'execució de Python. Consulteu la pàgina Obtindre informació de la sessió per obtindre més detalls pel que fa a la classe Sessiion omesa.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Localització dels scripts de l'usuari
if not user_lib in sys.path:
sys.path.insert(0 userlib) # Afig al camí de cerca
import screen_io as ui # el mòdul «screen_io.py» està ubicat al directori user_lib
# El vostre codi comença a partir d'ací
Aquest exemple en Python exposa una variable local, XSCRIPTCONTEXT, a un mòdul importat:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Localització dels scripts compartits
if not share_lib in sys.path:
sys.path.insert(0 share_lib) # Afig al camí de cerca
from IDE_utils import ScriptContext # «IDE_utils.py» es troba amb els scripts Python compartits.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# El vostre codi comença a partir d'ací
A diferència dels scripts personals i compartits, els scripts d'instal·lació del LibreOffice es poden importar en qualsevol moment. Al costat dels mòduls Python del LibreOffice uno & unohelper, altres scripts presents al directori <installation_path>/program es poden importar directament, com el mòdul msgbox.
Amb l'intèrpret per a 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"))
A continuació s'il·lustra la importació d'un mòdul Python incrustat a un document. La gestió d'errors no és detalla. El camí de temps d'execució del Python s'actualitza quan s'ha obert el document i abans del tancament. Consulteu Macros controlades per esdeveniments per aprendre a associar macros Python als esdeveniments del document.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Prepara la importació de mòduls Python quan es carregua el document """
PythonLibraries.loadLibrary('lib/subdir') # Afig un directori al camí de cerca
PythonLibraries.loadLibrary('mygui' 'screenio') # Add dir. & import screen_io
def OnDocQueryCloseUnloadPython():
""" Neteja la variable PYTHON_PATH quan el document es tanca """
PythonLibraries.unloadLibrary('mygui') # Neteja el camí d’execució de Python
# Nota: els mòduls importats romanen carregats en aquest exemple.
class PythonLibraries():
""" Carregador de biblioteques i importador de mòduls per a Python
adaptació de «Bibliothèque de fonctions» d'Hubert Lambert
a https//forum.openoffice.org/fr/forum/viewtopic.php?p=286213 ""
def isImportedModule(module_name: str) -> bool:
""" Comprova la llista de mòduls de temps d'execució ""
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Comprova el contingut de la variable PYTHON_PATH """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" afig el directori a la variable PYTHON_PATH, importació del mòdul anomenat """
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):
""" elimina el directori de PYTHON_PATH """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)