Turinys

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

„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

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

Susijusios temos

„Basic“ UNO objektai, funkcijos ir paslaugos

Importuojant „Python“ modulius

Įvedimas ir išvedimas į ekraną

LibreOffice Python skriptai žinynas