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