Programěrowanje ze skriptami Python

Makro Python jo funkcija w dataji .py, kótaraž se ako modul identificěrujo. Na rozdźěl wót LibreOffice Basic a jogo dwanastkow funkcijow abo słužbow UNO-objektow makra Python jadnotliwy UNO-objektXSCRIPTCONTEXT, zgromadnje z JavaScript a BeanShell wužywaju. Globalny tupel g_exportedScripts eksplicitnje wuběrajobne makra z modula nalicyjo. Module Python maju awtonomnu kodowu logiku a su njewótwisne jaden wót drugego.

Globalna wariabla XSCRIPTCONTEXT

Zakładne UNO-móžnosći Basic daju se z globalneje wariable XSCRIPTCONTEXT wótwóźiś. Glejśo LibreOffice API za dopołne wopisanje XSCRIPTCONTEXT. Metody XSCRIPTCONTEXT su slědujuce:

Metody

Wopisanje

W Basic pśirědowany ako

getDocument()

Dokumentowa referenca, z kótarejuž skript móžo źěłaś.

ThisComponent

getDesktop()

Desktopowa referenca, z kótarejuž skript móžo źěłaś.

StarDesktop

getComponentContext()

Komponentowy kontekst, z kótarymž skript móžo druge UNO-komponenty napóraś.

GetDefaultContext


Zgromadnje wužytej instalaciskej skripta HelloWorld a Capitalise na UNO póśěgowane makra znaglědnatej, kótarež globalnu wariablu XSCRIPTCONTEXT wužywatej.

tip

Standardna wudaśowa dataja Python njejo k dispoziciji, gaž se makra Python z Rědy – Makra – Makro wuwjasć… wuwjadu. Glejśo Zapódaśe/Wudaśe na wobrazowce za dalšne informacije.


Modulowy import

warning

XSCRIPTCONTEXT se za importěrowane module k dispoziciji njestaja.


Biblioteki LibreOffice Basic klase, rutiny a wariable wopśimuju, module Python klase, funkcije a wariable wopśimuju. Powšykne źěle zasejwužywajobnych funkcijow Python abo UNO muse se w Móje makra w (User Profile)/Scripts/python/pythonpath składowaś. Biblioteki Python pomagaju module organizěrowaś, aby kolizijam modulowych mjenjow zajźowali. Importěrujśo uno.py w zgromadnje wužytych modulach.

Typiske UNO-móžnosći BASIC daju se z pomocu modula uno.py wótwóźiś. Wužywajśo interaktiwnu konsolu Python, aby dopołne modulowe wopisanje z pomocu pśikazow Python dir() a help() dostał.

Funkcije

Wopisanje

W Basic pśirědowany ako

absolutize()

Wrośa absolutny datajowy URL z pódanych URL.

createUnoStruct()

Napórajo UNO-strukturu abo wuwześe, kótarež se pśez typeName pódawa.

CreateUNOStruct()

fileUrlToSystemPath()

Wrośa systemowu sćažku.

ConvertFromURL()

getClass()

Wrośa klasu konkretnego UNO-wuwześa, struktury abo zwězowańskego městna.

getComponentContext()

Wrośa komponentowy kontekst UNO, kótaryž se wužywa, aby cas wužywanja inicializěrował.

GetDefaultContext()

Enum()

getConstantByName()

Pyta za gódnotu IDL-konstanty pó jeje eksplicitnym mjenju.

Glejśo konstantowe kupki API

isInterface()

Wrośa True, gaž obj jo klasa zwězowańskego městna UNO.

systemPathToFileUrl()

Wrośa datajowy URL za pódanu systemowu sćažku.

ConvertToURL()


Pśedinstalěrowane LibreLogo, NamedRanges, SetCellColor a TableSample modul uno.py wužywaju.

Dalšne pśikłady Python-Basic

Python UNO

UNO-funkcije Basic

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Glejśo Dialog wócyniś

CreateUnoDialog()

Glejśo Pśisłuchak napóraś

CreateUnoListener()

Glejśo datowe 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


Zasajźony modul importěrowaś

Pódobnje na LibreOffice Basic, kótaryž pśeglědowanje a zacytowanje bibliotekow pódpěra, daju se biblioteki Python jolic trjeba wuslěźiś a importěrowaś. Za dalšne informacije wó bibliotekowych kontejnerach cytajśo Nałožeńske programěrowańske zwězowańske městno LibreOffice (Application Programming Interface, API) abo ześěgniśo Software Development Kit LibreOffice (SDK).

Dołojce se w dokumenśe zasajźony modul Python znaglědnja, wobchad z wuwześami se njewopisujo.


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ Biblioteku zacytaś a modul importěrowaś
                
                Adaptěrowany z 'Bibliothèque de fonctions' wót 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: # sćažku pśidaś jolic trjeba
                    sys.path.insert(0, url) # doclib ma prioritatu
                if module_name: # importěrowaś, jolic trjeba
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io') # sćažku <lib> path pśidaś + <module> importěrowaś
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Pšosym pódprějśo nas!