Zmóžńće JavaScript we wobhladowaku, zo byšće strony pomocy za LibreOfficeDev pokazał.

Programowanje ze skriptami Python

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

Přirunanske operatory "==" or "!=" wužiwać

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