Python moduluak inportatzea

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.

warning

Kontuan izan <User Profile>/Scripts/python/pythonpath direktorio lokala beti arakatzen dela <User Profile>/Scripts/python bideko Python makro bat exekutatzen denean.


Fitxategi-sistemako moduluak inportatzea

Collabora Office Basic liburutegiek klaseak, errutinak eta aldagaiak dituzte; Python moduluek, berriz, klaseak, funtzioak eta aldagaiak dituzte. Python edo UNO eginbideen pieza berrerabilgarri arruntak Nire makroak karpetan biltegiratu behar dira, (erabiltzaile-profila)/Scripts/python/pythonpath barruan. Python liburutegiek moduluak antolatzeko balio dute, moduluen izenen gatazkak sor ez daitezen. Inportatu uno.py partekatutako moduluen barruan.

Erabiltzailearen moduluak edo modulu partekatuak

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

Instalaziorako moduluak aplikazioetarako

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

Dokumentuko modulua inportatzea

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)

Emaguzu laguntza!