Programowanje ze skriptami Python

Makro Python je funkcija wi dataji .py, kotraž so jako modul identifikuje. Na rozdźěl wot LibreOffice 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.

Globalna wariabla XSCRIPTCONTEXT

Zakładne UNO-móžnosće Basic dadźa so z globalneje wariable XSCRIPTCONTEXT wotwodźić. Hlejće LibreOffice 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.

tip

Standardna wudaćowa dataja Python k dispoziciji njeje, hdyž so makra Python z Nastroje – Makra – Makro wuwjesć… wuwjedu. Hlejće Zapodaće/Wudaće na wobrazowce za dalše informacije.


Modulowy import

warning

XSCRIPTCONTEXT so za importowane module k dispoziciji njestaja.


Biblioteki LibreOffice 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.

Dalše přikłady Python-Basic

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()

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


Zasadźeny modul importować

Podobnje na LibreOffice 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 LibreOffice (Application Programming Interface, API) abo sćehńće Software Development Kit LibreOffice (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
        

Prošu podpěrajće nas!