Pomoc LibreOffice 24.8
Makro Pythona to funkcja w pliku .py, identyfikowana jako moduł. W przeciwieństwie do LibreOffice Basic i tuzina funkcji lub usług obiektów UNO, makra Pythona używają pojedynczego obiektu UNO XSCRIPTCONTEXT, współdzielonego z JavaScript i BeanShell. Globalna krotka g_exportedScripts wyraźnie wyświetla wybieralne makra z modułu. Moduły Pythona przechowują autonomiczną logikę kodu i są od siebie niezależne.
Oryginalne obiekty UNO Basic można wywnioskować ze zmiennej globalnej XSCRIPTCONTEXT. Zapoznaj się z API LibreOffice, aby uzyskać pełny opis XSCRIPTCONTEXT. Metody XSCRIPTCONTEXT można podsumować następująco:
| Metody | Opis | Mapowane w Basic jako | 
|---|---|---|
| getDocument() | Odwołanie do dokumentu, w którym może działać skrypt. | ThisComponent | 
| getDesktop() | Odniesienie do pulpitu, na którym może działać skrypt. | StarDesktop | 
| getComponentContext() | Kontekst komponentu, którego skrypt może użyć do tworzenia innych komponentów UNO. | GetDefaultContext | 
Wspólne skrypty instalacyjne HelloWorld i Capitalise ilustrują makra związane z UNO wykorzystujące zmienną globalną XSCRIPTCONTEXT.
Standardowy plik wyjściowy Pythona nie jest dostępny podczas uruchamiania makr Pythona z menu . Zobacz Wejście i wyjście ekranu, aby uzyskać więcej informacji.
Element XSCRIPTCONTEXT nie jest dostarczany do importowanych modułó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.
Oryginalne obiekty UNO BASIC można wywnioskować za pomocą modułu uno.py. Użyj interaktywnej powłoki Pythona, aby uzyskać pełny opis modułu za pomocą poleceń dir() i help() Pythona.
| Funkcje | Opis | Mapowane w Basic jako | 
|---|---|---|
| absolutize() | Zwraca bezwzględny adres URL pliku z podanych adresów URL. | |
| createUnoStruct() | Tworzy strukturę UNO lub wyjątek określony przez typeName. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Zwraca ścieżkę systemową. | ConvertFromURL() | 
| getClass() | Zwraca klasę konkretnego wyjątku UNO, struktury lub interfejsu. | |
| getComponentContext() | Zwraca kontekst składnika UNO używany do inicjowania środowiska uruchomieniowego Pythona. | GetDefaultContext() | 
| Enum() getConstantByName() | Wyszukuje wartość stałej IDL, podając jej jawną nazwę. | Zobacz grupy stałych API | 
| isInterface() | Zwraca True, gdy obj jest klasą interfejsu UNO. | |
| systemPathToFileUrl() | Zwraca adres URL pliku dla podanej ścieżki systemowej. | ConvertToURL() | 
Preinstalowane skrypty LibreLogo, NamedRanges, SetCellColor i TableSample korzystają z modułu uno.py.
| UNO Pythona | Funkcje UNO Basic | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| Zobacz Otwieranie okna dialogowego | CreateUnoDialog() | 
| Zobacz Tworzenie detektora | CreateUnoListener() | 
| Zobacz typy danych UNO | CreateUnoValue() CreateObject() | 
| EqualUnoObjects() | |
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() | GetProcessServiceManager() | 
| def hasUnoInterfaces(obj, *interfaces): return set(interfaces).issubset(t.typeName for t in obj.Types) | HasUnoInterfaces() | 
| IsUnoStruct() | |
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() DESK = 'com.sun.star.frame.Desktop' desktop = smgr.createInstanceWithContext(DESK , ctx) | StarDesktop | 
| desktop = smgr.createInstanceWithContext(DESK , ctx) doc = desktop.CurrentComponent | ThisComponent | 
Podobnie jak LibreOffice Basic, który obsługuje przeglądanie i dynamiczne ładowanie bibliotek, biblioteki Pythona można eksplorować i importować na żądanie. Aby uzyskać więcej informacji na temat kontenerów bibliotecznych, odwiedź LibreOffice Application Programming Interface (API) lub pobierz LibreOffice Software Development Kit (SDK).
Poniżej zilustrowano import wbudowanego modułu dokumentu Pythona, obsługa wyjątków nie jest szczegółowo opisana:
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ załaduj bibliotekę i moduł importu
                
                przystosowano z 'Bibliothèque de fonctions' autorstwa Huberta Lamberta
                pod adresem https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # bieżący dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # dodaj ścieżkę, jeśli to konieczne
                    sys.path.insert(0, url)  # doclib ma pierwszeństwo
                if module_name:  # importuj na żądanie
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # dodaj ścieżkę <lib> + import <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros