Importowanie modułów Pythona

Skrypty Collabora Office w języku Python są dostępne w trzech wersjach: mogą być osobiste, udostępniane lub osadzone w dokumentach. Są one przechowywane w różnych miejscach opisanych w sekcji Organizacja i lokalizacja skryptów Pythona. Aby zaimportować moduły Pythona, ich lokalizacja musi być znana z Pythona w czasie wykonywania.

Ten mechanizm jest zilustrowany dla modułów opartych na systemie plików i modułach opartych na dokumentach. Dla przejrzystości pominięto obsługę wyjątków. Terminy biblioteka lub katalog, skrypty lub moduły są używane zamiennie. Makro w języku Python odnosi się do funkcji wewnątrz modułu.

warning

Zauważ, że lokalny katalog <User Profile>/Scripts/python/pythonpath jest zawsze eksplorowany podczas uruchamiania makra Pythona z <User Profile>/Scripts/python.


Importowanie modułu systemu plików

Biblioteki Collabora Office Basic zawierają klasy, procedury i zmienne, moduły Pythona zawierają klasy, funkcje i zmienne. Typowe fragmenty funkcji Pythona lub UNO wielokrotnego użytku muszą być przechowywane w Moich makrach w (Profil użytkownika)/Scripts/python/pythonpath. Biblioteki Pythona pomagają organizować moduły w celu zapobiegania kolizjom nazw modułów. Zaimportuj uno.py do współdzielonych modułów.

Moduły użytkownika lub współdzielone

Osobiste i współdzielone skrypty Pythona można importować, gdy ich katalogi zostaną uwzględnione w ścieżce wykonawczej Pythona. Więcej informacji na temat pominiętej klasy sesji można znaleźć na stronie Uzyskiwanie informacji o sesji.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys

user_lib = Session().UserPythonScripts  # Lokalizacja skryptów użytkownika
if not user_lib in sys.path:
    sys.path.insert(0, user_lib)  # Dodaj do ścieżki wyszukiwania
import screen_io as ui  # 'screen_io.py' moduł znajduje się w user_lib directory
# Poniżej znajduje się kod niestandardowy

Ten przykład Pythona udostępnia lokalną zmienną XSCRIPTCONTEXT w zaimportowanym module:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, sys

share_lib = Session.SharedPythonScripts()  # Lokalizacja udostępnionych skryptów
if not share_lib in sys.path:
    sys.path.insert(0, share_lib)  # Dodaj do ścieżki wyszukiwania
from IDE_utils import ScriptContext  # 'IDE_utils.py' znajduje się we wspólnych skryptach Pythona
XSCRIPTCONTEXT = ScriptContext(uno.getComponentContext)
# Poniżej znajduje się kod niestandardowy

Moduły instalacyjne dla aplikacji

W przeciwieństwie do skryptów osobistych i udostępnionych, skrypty instalacyjne Collabora Office można importować w dowolnym momencie. Oprócz modułów uno i unohelper Collabora Office Pythona, inne skrypty znajdujące się w katalogu <installation_path>/program można importować bezpośrednio, takie jak msgbox.

Za pomocą powłoki języka 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"))

Importowanie modułu dokumentu

Importowanie modułu osadzonego w dokumencie języka Python zostało zilustrowane poniżej. Obsługa błędów nie jest szczegółowo opisana. Ścieżka środowiska uruchomieniowego Pythona jest aktualizowana po otwarciu dokumentu i przed zamknięciem. Zapoznaj się z artykułem Makra sterowane zdarzeniami, aby dowiedzieć się, jak powiązać makra Pythona z dokumentacją zdarzeń.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import sys, uno

def OnDocPostOpenLoadPython():
    """ Przygotuj import modułów Pythona po załadowaniu dokumentu """
    PythonLibraries.loadLibrary('lib/subdir')  # Dodaj katalog do ścieżki wyszukiwania
    PythonLibraries.loadLibrary('my_gui', 'screen_io')  # Dodaje katalog i importuje screen_io

def OnDocQueryCloseUnloadPython():
    """ Czyści PYTHON_PATH podczas zamykania dokumentu """
    PythonLibraries.unloadLibrary('my_gui')  # Oczyszczanie ścieżki środowiska uruchomieniowego Pythona
    # Uwaga: w tym przykładzie zaimportowane moduły pozostają załadowane.

class PythonLibraries():
    """ Program ładujący biblioteki Pythona i importer modułów

    przystosowano z 'Bibliothèque de fonctions' autorstwa Huberta Lamberta
    pod adresem https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213 """
    def isImportedModule(module_name: str) -> bool:
        """ Sprawdź listę modułów wykonawczych """
        return (module_name in sys.modules.keys())
    def isLoadedLibrary(lib_name: str) -> bool:
        """ Sprawdź zawartość PYTHON_PATH """
        return (lib_name in sys.path)
    def loadLibrary(lib_name: str, module_name=None):
        """ dodaj katalog do PYTHON_PATH, zaimportuj nazwany moduł """
        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):
        """ usuń katalog z PYTHON_PATH """
        sys.path.remove(lib_name)

g_exportedScripts = (OnDocPostOpenLoadPython, OnDocQueryCloseUnloadPython)

Prosimy o wsparcie!