Pomoc za LibreOfficeDev 25.8
Makro Python je funkcija wi dataji .py, kotraž so jako modul identifikuje. Na rozdźěl wot LibreOfficeDev Basic a jeho dźesatkow funkcijow abo słužbow UNO-objektow makra Python jednotliwy UNO-objektXSCRIPTCONTEXT, zhromadnje z JavaScript a BeanShell wužiwaja. Globalny tupel g_exportedScripts eksplicitnje wuběrajomne makra z modula nalistuje. Module Python maja awtonomnu kodowu logiku a su njewotwisne jedyn wot druheho.
Zakładne UNO-móžnosće Basic dadźa so z globalneje wariable XSCRIPTCONTEXT wotwodźić. Hlejće LibreOfficeDev API za dospołne wopisanje XSCRIPTCONTEXT. Metody XSCRIPTCONTEXT su tele:
| Metody | Wopisanje | W Basic přirjadowany jako | 
|---|---|---|
| getDocument() | Dokumentowa referenca, z kotrejž skript móže dźěłać. | ThisComponent | 
| getDesktop() | Desktopowa referenca, z kotrejž skript móže dźěłać. | StarDesktop | 
| getComponentContext() | Komponentowy kontekst, z kotrymž skript móže druhe UNO-komponenty wutworić. | GetDefaultContext | 
Zhromadnje wužitej instalaciskej skriptaj HelloWorld a Capitalise na UNO poćahowane makra zwobraznjujetej, kotrež globalnu wariablu XSCRIPTCONTEXT wužiwatej.
Standardna wudaćowa dataja Python k dispoziciji njeje, hdyž so makra Python z wuwjedu. Hlejće Zapodaće/Wudaće na wobrazowce za dalše informacije.
XSCRIPTCONTEXT so za importowane module k dispoziciji njestaja.
Biblioteki LibreOfficeDev Basic klasy, rutiny a wariable wobsahuja, module Python klasy, funkcije a wariable wobsahuja. Powšitkowne dźěle zasowužiwajomnych funkcijow Python abo UNO dyrbja so w Moje makra znutřka (User Profile)/Scripts/python/pythonpath składować. Biblioteki Python pomhaja module organizować, zo bychu kolizijam modulowych mjenow zadźěwali. Importujće uno.py znutřka zhromadnje wužitych modulow.
Typiske UNO-móžnosće BASIC dadźa so z pomocu modula uno.py wotwodźić. Wužiwajće interaktiwnu konsolu Python, zo byšće dospołne modulowe wopisanje z pomocu přikazow Python dir() a help() dóstał.
| Funkcije | Wopisanje | W Basic přirjadowany jako | 
|---|---|---|
| absolutize() | Wróća absolutny datajowy URL z podatych URL. | |
| createUnoStruct() | Wutwori UNO-strukturu abo wuwzaće, kotrež so přez typeName podawa. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Wróća systemowu šćežku. | ConvertFromURL() | 
| getClass() | Wróća klasu konkretneho UNO-wuwzaća, struktury abo tykački. | |
| getComponentContext() | Wróća komponentowy kontekst UNO, kotryž so wužiwa, zo by čas fungowanja inicializował. | GetDefaultContext() | 
| Enum() getConstantByName() | Pyta za hódnotu IDL-konstanty po jeje eksplicitnym mjenje. | Hlejće konstantowe skupiny API | 
| isInterface() | Wróća True, hdyž obj je klasa UNO-tykački. | |
| systemPathToFileUrl() | Wróća datajowy URL za podatu systemowu šćežku. | ConvertToURL() | 
Předinstalowane LibreLogo, NamedRanges, SetCellColor a TableSample modul uno.py wužiwaja.
| Python UNO | UNO-funkcije Basic | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| Hlejće Dialog wočinić | CreateUnoDialog() | 
| Hlejće Posłuchak wutworić | CreateUnoListener() | 
| Hlejće datowe typy UNO | CreateUnoValue() CreateObject() | 
| Přirunanske operatory "==" or "!=" wužiwać | 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 | 
Podobnje na LibreOfficeDev Basic, kotryž přehladowanje a čitanje bibliotekow podpěruje, dadźa so biblioteki Python je-li trjeba wuslědźić a importować. Za dalše informacije wo bibliotekowych kontejnerach wopytajće Nałožensku programowansku tykačku LibreOfficeDev (Application Programming Interface, API) abo sćehńće Software Development Kit LibreOfficeDev (SDK).
Deleka so w dokumenće zasadźeny modul Python zwobraznjuje, wobchadźenje z wuwzaćemi so njewopisuje.
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ Biblioteku začitać a modul importować
                
                Adaptowany z 'Bibliothèque de fonctions' wot Hubert Lambert
                na https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument() # aktualny dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path: # šćežku přidać je-li trjeba
                    sys.path.insert(0, url) # doclib ma prioritatu
                if module_name: # importować, je-li trjeba
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io') # šćežku <lib> path přidać + <module> importować
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros