Importowanie modułów Pythona

Skrypty LibreOffice 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 LibreOffice 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 LibreOffice można importować w dowolnym momencie. Oprócz modułów uno i unohelper LibreOffice 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!