Tulong sa LibreOffice 24.8
Ang LibreOffice Python script ay may tatlong natatanging lasa, maaari silang maging personal, ibinahagi o i-embed sa mga dokumento. Ang mga ito ay nakaimbak sa iba't ibang lugar na inilarawan sa Organisasyon at Lokasyon ng Python Scripts . Upang makapag-import ng mga module ng Python, dapat malaman ang kanilang mga lokasyon mula sa Python sa oras ng pagtakbo.
Ang mekanismong ito ay inilalarawan para sa mga module na nakabatay sa file system at mga module na nakabatay sa dokumento. Ang paghawak ng exception ay tinanggal para sa kalinawan. Ang mga terminong aklatan o direktoryo, mga script o mga module ay ginagamit nang palitan. Ang Python macro ay tumutukoy sa isang function sa loob ng isang module.
Tandaan na<User Profile> /Scripts/python/pythonpath Ang lokal na direktoryo ay palaging ginalugad kapag nagpapatakbo ng isang Python macro mula sa<User Profile> /Scripts/python .
Maaaring ma-import ang mga personal at ibinahaging script ng Python kapag ang kanilang mga direktoryo ay kasama sa Python run time path. Sumangguni sa Pagkuha ng impormasyon ng session page para sa higit pang mga detalye tungkol sa tinanggal na Session Class.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Lokasyon ng mga script ng user
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Idagdag sa path ng paghahanap
import screen_io bilang ui # 'screen_io.py' module ay naninirahan sa user_lib directory
# Ang iyong code ay sumusunod dito
Ang halimbawang Python na ito ay naglalantad ng lokal na XSCRIPTCONTEXT variable sa isang na-import na module:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Nakabahaging lokasyon ng mga script
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Idagdag sa path ng paghahanap
mula sa IDE_utils import ScriptContext # 'IDE_utils.py' ay nakaupo sa mga nakabahaging script ng Python.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Ang iyong code ay sumusunod dito
Hindi tulad ng mga personal at nakabahaging script, maaaring ma-import ang mga script ng pag-install ng LibreOffice anumang oras. Sa tabi uno at walang katulong LibreOffice Python modules, iba pang mga script na nasa<installation_path> /programa direktoryo ay maaaring direktang ma-import, tulad ng msgbox modyul.
Gamit ang shell ng Python:
>>> 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"))
Ang pag-import ng naka-embed na module ng Python na dokumento ay inilalarawan sa ibaba. Hindi detalyado ang paghawak ng error. Ang Python run time path ay ina-update kapag nabuksan ang dokumento at bago isara. Sumangguni sa Mga Macro na Batay sa Kaganapan upang matutunan kung paano iugnay ang mga Python macro sa pagdokumento ng mga kaganapan.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Ihanda ang pag-import ng mga Python module kapag na-load ng doc. ang """
PythonLibraries.loadLibrary('lib/subdir') # Magdagdag ng direktoryo sa path ng paghahanap
PythonLibraries.loadLibrary('my_gui', 'screen_io') # Magdagdag ng dir. & import screen_io
def OnDocQueryCloseUnloadPython():
""" Linisin ang PYTHON_PATH kapag isinara ni doc. """
PythonLibraries.unloadLibrary('my_gui') # Python runtime path cleanup
# Tandaan: nananatiling naka-load ang mga na-import na module sa halimbawang ito.
class PythonLibraries():
""" Python library loader at module importer
hinango mula sa 'Bibliothèque de fonctions' ni Hubert Lambert
sa https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Suriin ang run time module list """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Suriin ang nilalaman ng PYTHON_PATH """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" magdagdag ng direktoryo sa PYTHON_PATH, import na pinangalanang module """
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):
""" alisin ang direktoryo mula sa PYTHON_PATH """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)