Python : Programowanje z Python

Wobsah

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

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

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

Podobne temy

Objekty, Funkcije a słužby UNO BASIC

Module Python importować

Zapodaće/Wudaće na wobrazowce

LibreOfficeDev Pomoc wo skriptach Python

Prošu podpěrajće nas!