Importerer Phyton Moduler

LibreOffice Python-skript kommer i tre forskjellige smaker, de kan være personlige, delte eller innebygd i dokumenter. De lagres på forskjellige som steder beskrevet iPython Skript Organisering og Plassering. For å kunne importere Python-moduler, må deres beliggenhet være kjent fra Python under kjøretid.

Denne mekanismen er illustrert for filsystembaserte moduler og dokumentbaserte moduler. Unntakshåndtering utelates for enkelhetens skyld. Vilkårs bibliotek eller katalog, skript eller moduler brukes om hverandre. En Python-makro refererer til en funksjon inne i en modul.

warning

Noter at<User Profile>Scripts/python/pythonpathlokal katalog utforskes alltid når en Phyton makro kjøres fra<User Profile>/Scripts/python.


Fil System modul import

LibreOffice Grunnleggende biblioteker inneholder klasser, rutiner og variabler, Python-moduler inneholder klasser, funksjoner og variabler. Vanlige deler av gjenbrukbare Python- eller UNO-funksjoner må lagres iMine makroer i (Brukerprofil)/Scripts/python/pythonpath. Python-biblioteker hjelper til med å organisere moduler for å forhindre modulkollisjon. Importer uno.py i delte moduler.

Bruker delte moduler

Personlige og delte Python-skript kan importeres når bibliotekene er importert i Python-kjøremiljøet. Se siden Hent informasjon for mer informasjon om utelatt sesjonsklasse.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts # User scripts location
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Legg til i søkesstien
        import screen_io as ui  # 'screen_io.py' modulen finnes i user_lib directory
        # Koden din følger her
    

Dette Python-eksemplet eksponerer en lokal XSCRIPTCONTEXT-variabel for en importert modul:


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Delte skriptplasseringer
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  #Legg til i søkestien
        fra IDE_utils import ScriptContext  # 'IDE_utils.py' finnes sammen med delte Python-skript.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Koden din følger her
    

Installasjonsmoduler for applikasjoner

I motsetning til personlige og delte skript, kan LibreOffice installasjonsskript importeres når som helst. Ved siden av uno & unohelper LibreOffice Python-moduler, kan andre skript som er tilstede i<installation_path>/program -katalogen importeres direkte, for eksempel msgbox -modulen.

Med Python-skall:

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

Import av dokumentmodul

Import av en Python-dokument innebygd modul er illustrert nedenfor. Feilhåndtering er ikke på et detaljert nivå. Python-kjøretidsstien oppdateres når dokumentet er åpnet og før lukking. Sjekk Hendelsesdrevne makroer for å lære hvordan du knytter Python-makroer til dokumenthendelser.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Forbered Python-modul import når dok.lastet """
            PythonLibraries.loadLibrary('lib/subdir')  # Legg til katalog i søkestien
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Add dir. & import screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Rens opp PYTHON_PATH når dok. Lukkes """
            PythonLibraries.unloadLibrary('my_gui')  # Opprydding av Python kjøremiljø
            # Merk: importerte moduler er fortsatt lastet i dette eksemplet.
            
        class PythonLibraries():
            """ Python-biblioteklaster og modulimporterer
            
            tilpasset fra 'Bibliothèque de fonctions' av Hubert Lambert
            ved https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
            def isImportedModule(module_name: str) -> bool:
                """ Sjekk kjøretidsmiljø-modullisten """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Kontroller PYTHON_PATH-innholdet """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ legg til katalog i PYTHON_PATH, importer navngitt 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):
                """ fjern katalog fra PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)
    

Supporter oss!