Nápověda LibreOfficeDev 7.6
Makro Pythonu je funkce v souboru .py, který je rozpoznán jako modul. Na rozdíl od jazyka LibreOfficeDev Basic, jenž obsahuje desítky objektů, funkcí a služeb UNO, používají makra Pythonu jediný objekt UNO XSCRIPTCONTEXT, který je sdílený s jazyky JavaScript a BeanShell. Seznam všech maker modulu, která lze vybrat, se nachází v globální n-tici g_exportedScripts. Moduly Pythonu obsahují samostatný a na ostatních modulech nezávislý kód.
Možnosti, které nabízí UNO v Basicu, lze odvodit z globální proměnné XSCRIPTCONTEXT. Její kompletní popis naleznete v dokumentaci API pro LibreOfficeDev. Metody proměnné XSCRIPTCONTEXT souhrnně:
| Metoda | Popis | Mapována v Basicu jako | 
|---|---|---|
| getDocument() | Odkaz na dokument, v němž může skript provádět činnost. | ThisComponent | 
| getDesktop() | Odkaz na desktop, v němž může skript provádět činnost. | StarDesktop | 
| getComponentContext() | Kontext komponenty, kterou může skript použít pro vytváření jiných komponent UNO. | GetDefaultContext | 
Příklady maker vztahujících se k objektům UNO a využívajících globální proměnnou XSCRIPTCONTEXT jsou nainstalované sdílené skripty HelloWorld a Capitalise.
Při spouštění maker Pythonu z nabídky není k dispozici standardní výstupní soubor pro Python. Další informace naleznete v části Vstup a výstup na obrazovku.
Pro importované moduly není proměnná XSCRIPTCONTEXT k dispozici.
Knihovny pro LibreOfficeDev Basic obsahují třídy, podprogramy a proměnné, moduly Pythonu obsahují třídy, funkce a proměnné. Společné opětovně využitelné části pro Python nebo UNO je nutné uložit v kontejneru Moje makra v umístění (Uživatelský profil)/Scripts/python/pythonpath. Moduly jsou uspořádány do knihoven Pythonu, aby se zabránilo konfliktům mezi jejich názvy. Mezi sdílené moduly naimportujte uno.py.
Možnosti, které nabízí UNO Basicu, lze odvodit pomocí modulu uno.py. V interaktivním shellu Pythonu můžete získat úplný popis modulu pomocí příkazů dir() a help().
| Funkce | Popis | Mapována v Basicu jako | 
|---|---|---|
| absolutize() | Vrátí absolutní adresu URL souboru se zadaných adres. | |
| createUnoStruct() | Vytvoří strukturu nebo výjimku UNO podle zadané hodnoty typeName. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Vrátí cestu v systému. | ConvertFromURL() | 
| getClass() | Vrátí třídu určité výjimky, struktury nebo rozhraní typu UNO. | |
| getComponentContext() | Vrátí kontext komponenty UNO použitý pro inicializaci běhového prostředí Pythonu. | GetDefaultContext() | 
| Enum() getConstantByName() | Vyhledá hodnotu konstanty IDL podle jejího názvu. | viz API pro skupiny konstant | 
| isInterface() | Vrátí True, pokud je obj třída rozhraní UNO. | |
| systemPathToFileUrl() | Vrátí adresu URL souboru pro zadanou cestu v systému. | ConvertToURL() | 
Modul uno.py používají nainstalované sdílené skripty LibreLogo a TableSample.
| UNO Pythonu | UNO Basicu | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| CreateUnoDialog() | |
| CreateUnoListener() | |
| viz datové typy 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 | 
Podobně jako LibreOfficeDev Basic, který podporuje procházení a dynamické načítání knihoven, lze knihovny Pythonu prozkoumávat a importovat na vyžádání. Další informace o kontejnerech knihoven naleznete na adrese LibreOfficeDev Application Programming Interface (API) nebo si stáhněte LibreOfficeDev Software Development Kit (SDK).
Import vloženého modulu dokumentu Python je znázorněn níže, zpracování výjimek není podrobně popsáno:
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ načte knihovnu a naimportuje modul
                
                upraveno z příkladu "Bibliothèque de fonctions" od Huberta Lamberta
                na stránce https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # aktuální dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # přidá cestu, je-li to nutné
                    sys.path.insert(0, url)  # knihovna dokumentu má přednost
                if module_name:  # naimportuje, je-li požadováno
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # přidá cestu s knihovnou a naimportuje modul
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros