Collabora Office 24.04 laguntza
Collabora Office Python scriptak hiru motatakoak izan daitezke: pertsonalak, partekatuak edo dokumentuetan kapsulatuak. Hainbat tokitan biltegiratzen dira, begiratu Python scripten antolaketa eta kokalekua. Python moduluak inportatzeko, Python exekuzio-garaian ezagutu behar ditu haien kokalekuak.
Mekanismo hori fitxategi-sistemetan oinarritutako moduluen bidez eta dokumentuetan oinarritutakoen bidez azaldu dira. Salbuespenen kudeaketa kendu egin da, azalpenak argiagoak izateko. Zenbait termino (liburutegia edo direktorioa, scriptak edo moduluak) elkar trukagarriak dira. Python makro bat modulu baten barruan dagoen funtzio bat da.
Kontuan izan <User Profile>/Scripts/python/pythonpath direktorio lokala beti arakatzen dela <User Profile>/Scripts/python bideko Python makro bat exekutatzen denean.
Python script pertsonalak eta partekatuak inportatzeko, haien direktorioek Pythonen exekuzio-garaiaren bide-izenean egon behar dute. Ikus Saioaren informazioa eskuratzea orria falta diren saio-klaseen inguruko xehetasun gehiago ezagutzeko.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
user_lib = Session().UserPythonScripts # Erabiltzaile-scripten kokalekua
if not user_lib in sys.path:
sys.path.insert(0, user_lib) # Gehitu bilaketa-bideari
import screen_io as ui # 'screen_io.py' modulua user_lib direktorioan dago
# Zure kodea hemen doa
Python adibide honek XSCRIPTCONTEXT aldagai bat inportatutako modulu bati erakusten dio:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys
share_lib = Session.SharedPythonScripts() # Partekatutako scripten kokalekua
if not share_lib in sys.path:
sys.path.insert(0, share_lib) # Gehitu bilaketa-bideari
from IDE_utils import ScriptContext # 'IDE_utils.py' partekatutako Python scriptekin dago.
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Zure kodea hemen doa
Script pertsonal eta partekatuak ez bezala, Collabora Office instalazio scriptak edozein unetan inportatu daitezke. uno & unohelper Collabora Office Python moduluen ondoan, <installation_path>/program direktorioan dauden beste script batzuk zuzenean inportatu daitezke, adibidez msgbox modulua.
Python kontsolarekin:
>>> 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"))
Dokumentu batean kapsulatutako Python modulu bat inportatzea azaltzen da behean. Erroreen maneiua ez da azaltzen. Pythonen exekuzio-garaiko bide-izena eguneratu egiten da dokumentua ireki denean eta itxi baino lehen. Ikus Gertaeren mendeko makroak Python makroak dokumentu-gertaerekin nola lotu ikasteko.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys, uno
def OnDocPostOpenLoadPython():
""" Prestatu Python moduluen inportazioa dok. kargatzen denean """
PythonLibraries.loadLibrary('lib/subdir') # Gehitu direktorioa bilaketa-bidera
PythonLibraries.loadLibrary('my_gui', 'screen_io') # Gehitu direktorioa eta inportatu screen_io
def OnDocQueryCloseUnloadPython():
""" Garbitu PYTHON_PATH dok. ixten denean """
PythonLibraries.unloadLibrary('my_gui') # Pythonen exekuzio-garaiko bide-izena garbitzea
# Oharra: Adibide honetan, inportatutako moduluek kargatuta jarraitzen dute.
class PythonLibraries():
""" Python liburutegien kargatzailea eta moduluen inportatzailea
Hubert Lambert garatzailearen 'Bibliothèque de fonctions' lanetik moldatua
https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
def isImportedModule(module_name: str) -> bool:
""" Egiaztatu exekuzio-garaiko moduluen zerrenda """
return (module_name in sys.modules.keys())
def isLoadedLibrary(lib_name: str) -> bool:
""" Egiaztatu PYTHON_PATH edukia """
return (lib_name in sys.path)
def loadLibrary(lib_name: str, module_name=None):
""" gehitu direktorioa PYTHON_PATH bideari, inportatu izendun modulua """
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):
""" kendu direktorioa PYTHON_PATH aldagaitik """
sys.path.remove(lib_name)
g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)