Spis treści

# 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.

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)

Tematy pokrewne

Uzyskiwanie informacji o sesji

Programowanie za pomocą skryptów Pythona

Organizacja i lokalizacja skryptów Pythona

Aby zapoznać się z przykładami makr sterowanych zdarzeniami, zobacz Tworzenie detektorów Pythona.