Pomoč LibreOfficeDev 7.6
Makro Python je funkcija v datoteki. py, identificirana kot modul. Za razliko od LibreOfficeDev Basica in njegovih ducat funkcij ali storitev predmetov UNO makri v Pythonu uporabljajo posamičen predmet UNO XSCRIPTCONTEXT, v skupni rabi z JavaScriptom ter BeanShellom. Globalna tupla g_exportedScripts izrecno našteva izbirne makre iz modula. Moduli Python imajo avtonomno logiko kode in so neodvisni drug od drugega.
Izvirne zmožnosti Basic UNO je mogoče prevzeti iz globalne spremenljivke XSCRIPTCONTEXT. Glejte API LibreOfficeDev za popoln opis XSCRIPTCONTEXT. Metode XSCRIPTCONTEXT lahko povzamemo tako:
| Metode | Opis | Preslikano v Basic kot | 
|---|---|---|
| getDocument() | Sklic dokumenta, na katerem lahko skript deluje. | ThisComponent | 
| getDesktop() | Sklic namizja, na katerem lahko skript deluje. | StarDesktop | 
| getComponentContext() | Kontekst komponente, ki ga skript lahko uporabi za ustvarjanje drugih komponent UNO. | GetDefaultContext | 
Ob namestitvi v skupno rabo podana skripta HelloWorld ter Capitalise sta ilustracija za Uno-sorodne makre, ki uporabljajo globalno spremenljivko XSCRIPTCONTEXT.
Standardna izhodna datoteka v Pythonu ni na voljo, ko zaženete makre Python makre prek menijskega ukaza . Za podrobnosti glejte Vhod/izhod prek zaslona .
XSCRIPTCONTEXT ni na voljo za uvožene module.
Knjižnice LibreOfficeDev Basic vsebujejo razrede, procedure in spremenljivke, moduli Python pa vsebujejo razrede, funkcije in spremenljivke. Skupne kose ponovno uporabnih funkcionalnosti Python ali UNO je potrebno shraniti v Moje makre v (uporabniški profil)/Scripts/python/pythonpath. Knjižnice Python so priročne za organizacijo modulov, da preprečite spore z imeni modulov. Uvozite uno.py v module za skupno rabo.
Izvirne zmožnosti Basic UNO je mogoče prevzeti iz modula uno.py. Uporabite interaktivno lupino Python za popoln opis modula z ukazoma Python dir() in help().
| Funkcije | Opis | Preslikano v Basic kot | 
|---|---|---|
| absolutize() | Vrne absolutni URL datoteke iz danih URL-jev. | |
| createUnoStruct() | Ustvari strukturo UNO ali izjemo, ki jo poda typeName. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Vrne sistemsko pot. | ConvertFromURL() | 
| getClass() | Vrne razred konkretne izjeme UNO, struct ali vmesnika (interface). | |
| getComponentContext() | Vrne kontekst komponente UNO, ki se uporablja za inicializacijo izvajalnika Python. | GetDefaultContext() | 
| Enum() getConstantByName() | Pridobi vrednost konstante IDL s podajanjem njenega izrecnega imena. | Glejte skupine konstant API-ja | 
| isInterface() | Vrne TRUE, ko je obj razred vmesnika UNO. | |
| systemPathToFileUrl() | Vrne URL datoteke za dano sistemsko pot. | ConvertToURL() | 
Ob namestitvi v skupno rabo podana skripta LibreLogo ter TableSample uporabljata modul uno.py.
| Python UNO | Funkcionalnosti UNO Basic | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| Glejte Odpiranje pogovornega okna. | CreateUnoDialog() | 
| Glejte Ustvarjanje poslušalca. | CreateUnoListener() | 
| Glejte podatkovne vrste 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 | 
Podobno kot LibreOfficeDev Basic, ki podpira brskanje in dinamično nalaganje knjižnic, lahko knjižnice Python raziskujete in uvažate na zahtevo. Če želite več informacij o vsebnikih knjižnice, obiščite Programski vmesnik LibreOfficeDev (API) ali prenesite Razvojni programski paket LibreOfficeDev (SDK).
Uvažanje v dokument vdelanega modula Python je prikazano spodaj, ravnanje z izjemami ni podrobno opisano:
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ naloži knjižnico in uvozi modul
                
                Prirejeno po »Bibliothèque de fonctions« avtorja Huberta Lamberta
                na naslovu https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # trenutni dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # po potrebi dodaj pot
                    sys.path.insert(0, url)  # doclib ima prednost
                if module_name:  # uvozi, če je zahtevano
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # dodaj pot <lib> in uvozi <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros