Python : Programěrowanje z Python

Wopśimjeśe

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

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

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()
Pśirownańske operatory "==" abo "!=" wužywaś | 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ódobne temy

Objekty, Funkcije a słužby UNO BASIC

Module Python importěrowaś

Zapódaśe/Wudaśe na wobrazowce

LibreOffice Pomoc wó skriptach Python

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