Programavimas naudojant „Python“ skriptus

„Python“ makrokomanda yra funkcija .py faile, identifikuojama kaip modulis. Skirtingai nuo „LibreOffice Basic“ ir jo keliolikos UNO objektų funkcijų ar paslaugų , „Python“ makrokomandose naudojamas XSCRIPTCONTEXT UNO vienas objektas, bendrinamas su „JavaScript“ ir „BeanShell“. g_exportedScript globaliame rinkinyje išreikštai nurodomos pasirenkamos makrokomandos iš modulio. „Python“ moduliai turi autonominę kodų logiką ir yra nepriklausomi vienas nuo kito.

XSCRIPTCONTEXT globalus kintamasis

Iš to globalaus kintamojo XSCRIPTCONTEXT galima spręsti apie tikras pagrindines UNO galimybes. Atsižvelkite į „LibreOffice“ API norėdami gauti išsamų XSCRIPTCONTEXT aprašą. XSCRIPTCONTEXT metodo santrauka:

Metodai

Aprašas

Susieta su „Basic“ kaip

getDocument()

Dokumento nuoroda, pagal kurią skriptas gali veikti.

ThisComponent

getDesktop()

Darbalaukio nuoroda, pagal kurią skriptas gali veikti.

StarDesktop

getComponentContext()

Komponento kontekstas, kurį skriptas gali naudoti kurdamas kitus „uno“ komponentus.

GetDefaultContext


Sveikas, pasauli ir Didžiosios raidės diegimo bendri skriptai iliustruoja su UNO susijusių makrokomandų globalaus kintamojo XSCRIPTCONTEXT naudojimą.

tip

„Python“ standartinio išvedimo failo naudoti negalima, kai vykdote „Python“ makrokomandas iš meniu Įrankiai → Makrokomandos → Vykdyti makrokomandą. Norėdami gauti daugiau informacijos, žr. Įvestis ir išvestis į ekraną.


Modulio importas

warning

XSCRIPTCONTEXT nėra pateiktas importuojantiems moduliams.


„LibreOffice Basic“ bibliotekose yra klasės, paprogramės ir kintamieji, „Python“ moduliuose yra klasės, funkcijos ir kintamieji. Įprastos daugkartinio naudojimo „Python“ ar UNO funkcijų savybės turi būti laikomos naudojant Mano makrokomandos (vartotojo profilis)/Scripts/python/pythonpath. „Python“ bibliotekos padeda organizuoti modulius, kad būtų išvengta modulių pavadinimų persidengimo. Importuokite uno.py į bendrinamus modulius.

Naudojant modulį uno.py galima spręsti apie BASIC UNO galimybes. Naudokite „Python“ interaktyvų apvalką kad gautumėte išsamų modulio aprašą pasitelkus dir() ir help() „Python“ komandas.

Funkcijos

Aprašas

Susieta su „Basic“ kaip

absolutize()

Grąžina absoliutų failo URL iš nurodytų URL.

createUnoStruct()

Sukuria UNO struktūrą arba išimtį naudojant „typeName“.

CreateUNOStruct()

fileUrlToSystemPath()

Grąžina sistemos kelią.

ConvertFromURL()

getClass()

Grąžina konkrečios UNO išimties, struktūros ar sąsajos klasę.

getComponentContext()

Pateikia UNO komponento kontekstą, naudojamą inicializuoti „Python“ vykdymui.

GetDefaultContext()

Enum()

getConstantByName()

Ieško IDL konstantos reikšmės, pateikdamas jos vardą išreikštu pavidalu.

Žr. API konstantų grupes

isInterface()

Grąžina „True“, kai objektas yra UNO sąsajos klasė.

systemPathToFileUrl()

Grąžina nurodyto sistemos kelio failo URL.

ConvertToURL()


LibreLogo, NamedRanges, SetCellColor and TableSample preinstalled scripts use uno.py module.

Daugiau „Python-Basic“ pavyzdžių

„Python“ UNO

„Basic“ UNO savybės

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Žr. Dialogo atvėrimas

CreateUnoDialog()

Žr. Agentų kūrimas

CreateUnoListener()

Žr. UNO duomenų tipus

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


Importing an embedded Module

Similarly to LibreOffice Basic that supports browsing and dynamic loading of libraries, Python libraries can be explored and imported on demand. For more information on library containers, visit LibreOffice Application Programming Interface (API) or download LibreOffice Software Development Kit (SDK).

Importing a Python document embedded module is illustrated below, exception handling is not detailed:


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ įkelti biblioteką ir importo modulį
                
                'Bibliothèque de fonctions' adaptavo Hubert Lambert
                Prieiga https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # dabartinis dokumentas
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # pridėti kelią, jei būtina
                    sys.path.insert(0, url)  # doclib turi viršenybę
                if module_name:  # import jei prašoma
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # add <lib> kelias + import <modulis>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Paremkite mus!