Contingut

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

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

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()

Els scripts preinstal·lats LibreLogo, NamedRanges, SetCellColor i TableSample usen el mòdul uno.py.

## 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()
Usa els operadors de comparació «==» o «!=» | 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

Temes relacionats

GA Basic UNO Objects Funcions i Serveis

Importació de mòduls Python

Entrada/sortida a pantalla

Ajuda dels scripts de Python a LibreOffice