Indhald
Innhaldsliste 🔎︎

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

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)

Liknande emne

Få informasjon om økta

Programmering med Python-skript

Organisering og plassering av Pythonskript

Sjå Creating a Python Listener med eksempel på hendingsdrivne makroar.