Pomoc Collabora Office 24.04
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.
Zauważ, że lokalny katalog <User Profile>/Scripts/python/pythonpath jest zawsze eksplorowany podczas uruchamiania makra Pythona z <User Profile>/Scripts/python.
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
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 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)