Vsebina

# 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.

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

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

Podobne teme

Predmeti, funkcije in storitve UNO Basic

Uvažanje modulov Python

Zaslonski vhod/izhod

Pomoč LibreOffice za skripte v jeziku Python