Importerer Phyton-modular

LibreOffice Python scripts come in three distinct flavors, they can be personal, shared or embedded in documents. They are stored in varying places described in Python Scripts Organization and Location. In order to import Python modules, their locations must be known from Python at run time.

Denne mekanismen er vist for filsystembaserte modular og dokumentbaserte modular. Unntakshandsamainga er ikkje teke med for å gjera det emklare å forstå. Termbibliotek eller mappe, skript eller modular vert brukte om kvarandre. Ein Python-makro refererer til ein funksjon inne i ein modul.

warning

Merk at den lokale mappa <User Profile>Scripts/python/pythonpath alltid vert utforska når ein Python-makro vert køyrd frå <User Profile>/Scripts/python.


Fil-system modul import

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.

Brukar eller delte modular

Personlege og delte Python-skript kan importerast når biblioteka er importerte i Python-køyremiljøet. Sjå nettsida Getting session information for meir informasjon om utelate sesjonsklasse.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import sys
            
        user_lib = Session().UserPythonScripts  # Plasseringa av brukarskript
        if not user_lib in sys.path:
            sys.path.insert(0, user_lib)  # Legg til søkjesti
        import screen_io as ui  # 'screen_io.py' module resides in user_lib directory
        # Her kjem koden din
    

Dette Python-eksempelet eksponerer ein lokal local XSCRIPTCONTEXT-variabel til ein importert modul.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
        import uno, sys
            
        share_lib = Session.SharedPythonScripts()  # Plasseringa av delte skript
        if not share_lib in sys.path:
            sys.path.insert(0, share_lib)  # Legg til søkjestien
        from IDE_utils import ScriptContext  # 'IDE_utils.py' sits with shared Python scripts.
        XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
        # Her kjem koden din
    

Installera modular for program

I motsetnad til personlege og delte skript, kan skript installerte i LibreOffice importerast når som helst. Ved sida av LibreOffice pythonmodulane uno og unohelper kan andre skript som finst i mappa <installation_path>/program importerast direkte, som for eksempel modulen msgbox.

Med Pythonskall:

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

Korleis du importerer ein innebygd Pythom-modul er forklart nedanfor. Feilhandsaminga er ikkje teke med. Stien for Python køyretid vert oppdatert når dokumentet vert opna og før det vert lukka. Sjå Hendingsdrivne makroar for å læra meir om korleis du kan kopla Python-makroar til hendingar i dokumentet.


        # -*- coding: utf-8 -*-
        from __future__ import unicode_literals
            
        import sys, uno
            
        def OnDocPostOpenLoadPython():
            """ Gjer klar import av Python-modular når dok vert lasta """
            PythonLibraries.loadLibrary('lib/subdir')  # Legg ei mappe til søkjestien
            PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Legg til dir. og import screen_io
            
        def OnDocQueryCloseUnloadPython():
            """ Rydd opp i PYTHON_PATH når dok. vert lukka """
            PythonLibraries.unloadLibrary('min_gui')  # Python rydding under køyretid
            # Merk: Dei importerte modulane vert verande innlasta i desse eksempla.
            
        class PythonLibraries():
            """ Python biblioteklastar og modulimportør
            
            henta frå «Bibliothèque de fonctions» av Hubert Lambert
            på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
            def isImportedModule(module_name: str) -> bool:
                """ Sjekk modullista for køyretid """
                return (module_name in sys.modules.keys())
            def isLoadedLibrary(lib_name: str) -> bool:
                """ Sjekk innhaldet i PYTHON_PATH """
                return (lib_name in sys.path)
            def loadLibrary(lib_name: str, module_name=None):
                """ legg mappe til PYTHON_PATH, importer namngjeven 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 mappa frå PYTHON_PATH """
                sys.path.remove(lib_name)
            
        g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)