Programiranje s skripti Python

Makro Python je funkcija v datoteki. py, identificirana kot modul. Za razliko od LibreOffice 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.

Globalna spremenljivka XSCRIPTCONTEXT

Izvirne zmožnosti Basic UNO je mogoče prevzeti iz globalne spremenljivke XSCRIPTCONTEXT. Glejte API LibreOffice 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.

tip

Standardna izhodna datoteka v Pythonu ni na voljo, ko zaženete makre Python makre prek menijskega ukaza Orodja – Makri – Zaženi makro. Za podrobnosti glejte Vhod/izhod prek zaslona .


Uvoz modulov

warning

XSCRIPTCONTEXT ni na voljo za uvožene module.


Knjižnice LibreOffice 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()


Vnaprej nameščeni skripti LibreLogo, NamedRanges, SetCellColor in TableSample uporabljaj modul uno.py.

Dodani primeri Python/Basic

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


Uvoz vdelanega modula

Podobno kot LibreOffice 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 LibreOffice (API) ali prenesite Razvojni programski paket LibreOffice (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
        

Podprite nas!