Innhold

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

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

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

            g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Lignende emner

Henting av øktinfo

Programmering med Python-skript

Organisering og plassering av Python-skript

Sjekk Opprett en Python Lytter for hendelsesdrevne makroeksempler.