Contingut

# Importació de mòduls Python

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.

## Importació del mòdul sistema de fitxers

LibreOffice Basic libraries contain classes, routines and variables, Python modules contain classes, functions and variables. Common pieces of reusable Python or UNO features must be stored in My macros within (User Profile)/Scripts/python/pythonpath. Python libraries help organize modules in order to prevent module name collisions. Import uno.py inside shared modules.

### Mòduls d'usuari o compartits

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í

### Mòduls d'instal·lació per a aplicacions

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"))

## Importació del mòdul Document

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, zipimport

            def OnDocPostOpenLoadPython(event = None):
                """ 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(event = None):
                """ 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 """
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    return (url 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(
                        f'{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 """
                    doc = XSCRIPTCONTEXT.getDocument()
                    url = uno.fileUrlToSystemPath(
                        f'{doc.URL}/Scripts/python/{lib_name}' )
                    sys.path.remove(url)

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Temes relacionats

S'està obtenint informació de la sessió

Programació amb scripts en Python

Organització i ubicació dels scripts en Python

Consulteu Crea un oient Python per a exemples de macros orientades a esdeveniments.

Ens cal la vostra ajuda!