Programació amb scripts en Python

A Python macro is a function within a .py file, identified as a module. Unlike LibreOffice Basic and its dozen of UNO objects functions or services, Python macros use the XSCRIPTCONTEXT UNO single object, shared with JavaScript and BeanShell. The g_exportedScripts global tuple explicitly lists selectable macros from a module. Python modules hold autonomous code logic, and are independent from one another.

Variable global XSCRIPTCONTEXT

Genuine Basic UNO facilities can be inferred from XSCRIPTCONTEXT global variable. Refer to LibreOffice API for a complete description of XSCRIPTCONTEXT. XSCRIPTCONTEXT methods summarize as:

Mètodes

Descripció

Mapped in Basic as

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

The component context which the script can use to create other uno components.

GetDefaultContext


HelloWorld and Capitalise installation shared scripts illustrate UNO-related macros making use of XSCRIPTCONTEXT global variable.

tip

Python standard output file is not available when running Python macros from Tools - Macros - Run Macro menu. Refer to Input/Output to Screen for more information.


Importació de mòduls

warning

XSCRIPTCONTEXT is not provided to imported modules.


LibreOffice Basic libraries contain classes, routines and variables, Python modules contain classes, functions and variables. Common pieces of reusable Python or UNO features must be stored in My macros within (User Profile)/Scripts/python/pythonpath. Python libraries help organize modules in order to prevent module name collisions. Import uno.py inside shared modules.

Genuine BASIC UNO facilities can be inferred using uno.py module. Use Python interactive shell to get a complete module description using dir() and help() Python commands.

Funcions

Descripció

Mapped in Basic as

absolutize()

Retorna un URL de fitxer absolut dels URL indicats.

createUnoStruct()

Creates a UNO struct or exception given by typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Retorna un camí del sistema.

ConvertFromURL()

getClass()

Returns the class of a concrete UNO exception, struct, or interface.

getComponentContext()

Returns the UNO component context used to initialize the Python runtime.

GetDefaultContext()

Enum()

getConstantByName()

Looks up the value of an IDL constant by giving its explicit name.

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 and TableSample installation shared 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()

See Opening a Dialog

CreateUnoDialog()

See Creating a Listener

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


Importació d'un mòdul integrat

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
            
            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 takes precedence
                if module_name:  # importació, si s'ha sol·licitat
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # add <lib> path + import <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Ens cal la vostra ajuda!