ການຊ່ວຍເຫຼືອ LibreOffice 26.2
ສະຄຣິບ Python ໃນ LibreOffice ມີສາມຮູບແບບຄື: ສ່ວນຕົວ, ແບບແບ່ງປັນ ຫຼື ແບບຝັງຢູ່ໃນເອກະສານ. ພວກມັນຖືກເກັບໄວ້ໃນບ່ອນຕ່າງໆ ຕາມທີ່ອະທິບາຍໃນ ການຈັດລະບຽບ ແລະ ຕຳແໜ່ງຂອງສະຄຣິບ Python. ເພື່ອນຳເຂົ້າໂມດູນ Python, ລະບົບ Python ຕ້ອງຮູ້ຕຳແໜ່ງຂອງພວກມັນໃນລະຫວ່າງການຣັນ.
ກົນໄກນີ້ສະແດງໃຫ້ເຫັນທັງໂມດູນທີ່ຢູ່ໃນລະບົບໄຟລ໌ ແລະ ໂມດູນໃນເອກະສານ. ການຈັດການຂໍ້ຜິດພາດແມ່ນໄດ້ຂ້າມໄປເພື່ອຄວາມຊັດເຈນ. ຄຳວ່າ ໄລບຣາຣີ ຫຼື ໄດເຣັກທໍຣີ, ສະຄຣິບ ຫຼື ໂມດູນ ແມ່ນຖືກໃຊ້ແທນກັນໄດ້. ແມັກໂຄຣ Python ໝາຍເຖິງຟັງຊັນທີ່ຢູ່ພາຍໃນໂມດູນ.
ໝາຍເຫດ: ໄດເຣັກທໍຣີ <User Profile>/Scripts/python/pythonpath ຈະຖືກກວດສອບສະເໝີເມື່ອຣັນແມັກໂຄຣ Python ຈາກ <User Profile>/Scripts/python.
ສະຄຣິບ Python ສ່ວນຕົວ ແລະ ແບບແບ່ງປັນສາມາດນຳເຂົ້າມາໄດ້ ເມື່ອໄດເຣັກທໍຣີຂອງພວກມັນຖືກລວມຢູ່ໃນເສັ້ນທາງການຣັນຂອງ Python. ເບິ່ງໜ້າ ການດຶງຂໍ້ມູນເຊດຊັນ ສຳລັບລາຍລະອຽດເພີ່ມເຕີມ.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # ຕຳແໜ່ງສະຄຣິບຂອງຜູ້ໃຊ້
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # ເພີ່ມໃສ່ເສັ້ນທາງການຄົ້ນຫາ
import screen_io as ui # ໂມດູນ 'screen_io.py' ຢູ່ໃນໄດເຣັກທໍຣີ user_lib
# ໃສ່ລະຫັດຂອງທ່ານຕໍ່ບ່ອນນີ້
ຕົວຢ່າງ Python ນີ້ຈະສົ່ງຕົວປ່ຽນ XSCRIPTCONTEXT ໃຫ້ກັບໂມດູນທີ່ນຳເຂົ້າມາ:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # ຕຳແໜ່ງສະຄຣິບແບບແບ່ງປັນ
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # ເພີ່ມໃສ່ເສັ້ນທາງການຄົ້ນຫາ
from IDE_utils import ScriptContext # 'IDE_utils.py' ຢູ່ຮ່ວມກັບສະຄຣິບ Python ແບບແບ່ງປັນ.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# ໃສ່ລະຫັດຂອງທ່ານຕໍ່ບ່ອນນີ້
ບໍ່ຄືກັບສະຄຣິບສ່ວນຕົວ ແລະ ແບບແບ່ງປັນ, ສະຄຣິບການຕິດຕັ້ງຂອງ LibreOffice ສາມາດນຳເຂົ້າມາໄດ້ທຸກເວລາ. ນອກຈາກໂມດູນ uno ແລະ unohelper ແລ້ວ, ສະຄຣິບອື່ນໆໃນໄດເຣັກທໍຣີ <installation_path>/program ກໍສາມາດນຳເຂົ້າມາໂດຍກົງໄດ້ ເຊັ່ນ ໂມດູນ msgbox.
ດ້ວຍ Python shell:
>>> 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"))
ການນຳເຂົ້າໂມດູນ Python ທີ່ຝັງໃນເອກະສານແມ່ນສະແດງໄວ້ຂ້າງລຸ່ມນີ້. ການຈັດການຂໍ້ຜິດພາດແມ່ນບໍ່ໄດ້ລະບຸລະອຽດ. ເສັ້ນທາງການຣັນຂອງ Python ຈະຖືກອັບເດດເມື່ອເປີດເອກະສານ ແລະ ກ່ອນປິດເອກະສານ. ເບິ່ງ ແມັກໂຄຣທີ່ຂັບເຄື່ອນດ້ວຍເຫດການ ເພື່ອຮຽນຮູ້ວິທີເຊື່ອມໂຍງແມັກໂຄຣ Python ກັບເຫດການຂອງເອກະສານ.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno, zipimport
def OnDocPostOpenLoadPython(event = None):
""" ກຽມການນຳເຂົ້າໂມດູນ Python ເມື່ອໂຫຼດເອກະສານ """
PythonLibraries.loadLibrary('lib/subdir') # ເພີ່ມໄດເຣັກທໍຣີໃສ່ເສັ້ນທາງການຄົ້ນຫາ
PythonLibraries.loadLibrary('my_gui', 'screen_io') # ເພີ່ມໄດເຣັກທໍຣີ ແລະ ນຳເຂົ້າ screen_io
def OnDocQueryCloseUnloadPython(event = None):
""" ລ້າງ PYTHON_PATH ເມື່ອປິດເອກະສານ """
PythonLibraries.unloadLibrary('my_gui') # ລ້າງເສັ້ນທາງການຣັນຂອງ Python
# ໝາຍເຫດ: ໂມດູນທີ່ນຳເຂົ້າມາຈະຍັງຄົງຖືກໂຫຼດຢູ່ໃນຕົວຢ່າງນີ້.
class PythonLibraries():
""" ຕົວໂຫຼດໄລບຣາຣີ ແລະ ຕົວນຳເຂົ້າໂມດູນ Python
ປັບປຸງມາຈາກ 'Bibliothèque de fonctions' ໂດຍ Hubert Lambert
ທີ່ https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" ກວດສອບລາຍການໂມດູນໃນຂະນະຣັນ """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" ກວດສອບເນື້ອຫາໃນ PYTHON_PATH """
url = uno.fileUrlToSystemPath(
f'{doc.URL}/Scripts/python/{lib_name}' )
return (url in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" ເພີ່ມໄດເຣັກທໍຣີໃສ່ PYTHON_PATH, ນຳເຂົ້າໂມດູນທີ່ລະບຸຊື່ """
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):
""" ລົບໄດເຣັກທໍຣີອອກຈາກ PYTHON_PATH """
doc = XSCRIPTCONTEXT.getDocument()
url = uno.fileUrlToSystemPath(
f'{doc.URL}/Scripts/python/{lib_name}' )
sys.path.remove(url)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)