Programació amb scripts en Python

Una macro Python és una funció dins d'un fitxer .py identificat com un mòdul. A diferència del LibreOffice Basic i la seva dotzena d'objectes unO funcions o serveis macros Python utilitzen un sol objecte XSCRIPTCONTEXT UNO compartit amb JavaScript i BeanShell. Els mòduls gexportedScripts globals llista explícitament macros seleccionables des d'un mòdul. Els mòduls Python mantenen una lògica de codi autònoma i són independents entre ells.

Variable global XSCRIPTCONTEXT

Les instal·lacions genuïnes Basic de l'UNO es poden inferir a partir de la variable global XSCRIPTCONTEXT. Consulteu l'API del LibreOffice per obtenir una descripció completa de XSCRIPTCONTEXT. Els mètodes XSCRIPTCONTEXT es resumeixen com a:

Mètodes

Descripció

Al Basic es correspon amb

getDocument()

La referència del document en el que pot operar l'script.

ThisComponent

getDesktop()

La referència de l'escriptori en el que pot operar l'script.

StarDesktop

getComponentContext()

El context del component que l'script pot utilitzar per crear altres components uno.

GetDefaultContext


GA HelloWorld i Capitalise instal·lació scripts compartits il·lustren macros relacionades amb l'UNO fent ús de la variable global XSCRIPTCONTEXT.

tip

El fitxer de sortida estàndard de Python no està disponible quan s'executen macros de Python des del menú Eines ▸ Macros ▸ Executa una macro. Consulteu Entrada/sortida a pantalla per a obtenir més informació.


Importació de mòduls

warning

GA XSCRIPTCONTEXT no es proporciona als mòduls importats.


Les llibreries bàsiques de PRODUCTNAME contenen classes, rutines i variables, els mòduls Python contenen classes, funcions i variables. Les peces reutilitzables comunes de Python o UNO s'han d'emmagatzemar a Les meves macros dins del (Perfil d'usuari)/Scripts/python/pythonpath. Les llibreries Python ajuden a organitzar els mòduls per evitar col·lisions amb els noms de mòduls. Importeu uno.py dins dels mòduls compartits.

Les instal·lacions genuïnes Basic de l'UNO es poden inferir utilitzant el mòdul uno.py. Utilitzeu l'interpret d'ordres interactiu Python per obtenir una descripció completa del mòdul utilitzant les ordres de Python dir() i help().

Funcions

Descripció

Al Basic es correspon amb

absolutize()

Retorna un URL de fitxer absolut dels URL indicats.

createUnoStruct()

Crea una estructura UNO o una excepció donada pel typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Retorna un camí del sistema.

ConvertFromURL()

getClass()

Retorna la classe d'una excepció concreta de l'UNO, estructura o interfície.

getComponentContext()

Retorna el context del component UNO utilitzat per inicialitzar el temps d'execució de Python.

GetDefaultContext()

Enum()

getConstantByName()

Cerca el valor d'una constant IDL donant el seu nom explícit.

Vegeu els grups constants d'API

isInterface()

Retorna Cert, si l'objecte és una classe d'una interfície UNO.

systemPathToFileUrl()

Retorna un URL de fitxer per al camí de sistema indicat.

ConvertToURL()


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

Més exemples Python-Basic

UNO en Python

Funcionalitats bàsiques de l'UNO

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Consulteu Obre un diàleg

CreateUnoDialog()

Consulteu Crea un oient

CreateUnoListener()

Vegeu els tipus de dades UNO

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


Importar un mòdul incrustat

De manera similar al Basic de LibreOffice que admet la navegació i la càrrega dinàmica de llibreries, les llibreries de Python es poden explorar i importar sota demanda. Per obtenir més informació sobre els contenidors de llibreries, visiteu la La interfície de programació d'aplicacions (API) de LibreOffice o descarregueu Kit de desenvolupament de programari (SDK) de LibreOffice

La importació d'un mòdul incrustat de documents Python s'il·lustra a continuació, no es detalla la gestió de les excepcions:


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ càrrega de la biblioteca i importació del mòdul
                
                Adaptat de «Bibliothèque de fonctions» d'Hubert Lambert
                a https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # document actual
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # addició del camí, si cal
                    sys.path.insert(0 url) # doclib té prioritat
                if module_name:  # importació, si s'ha sol·licitat
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = loadlibrary("mygui"'screenio') # afegeix <lib>camí + importa <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Ens cal la vostra ajuda!