Inhoud
Index 🔎︎

# Programmeren met Python-scripts

Een Python-macro is een functie binnen een .py-bestand, geïdentificeerd als een module. In tegenstelling tot LibreOffice Basic en zijn dozijn UNO-objecten functies of services, gebruiken Python-macro's de XSCRIPTCONTEXT UNO-object, gedeeld met JavaScript en Beanshell. De globale tuple g_exportedScripts vermeldt expliciet selecteerbare macro's uit een module. Python-modules bevatten autonome codelogica en zijn onafhankelijk van elkaar.

## XSCRIPTCONTEXT Global Variable

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:

Methodes | Omschrijving | Toegewezen in Basic als
getDocument() | De documentreferentie waarop het script kan werken. | ThisComponent
getDesktop() | De documentreferentie waarop het script kan werken. | StarDesktop
getComponentContext() | De componentcontext die het script kan gebruiken om andere uno-componenten te maken. | GetDefaultContext

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

Standaard uitvoerbestand van Python is niet beschikbaar bij het uitvoeren van Python-macro's via het menu Extra - Macro's - Macro uitvoeren. Bekijk Invoer/uitvoer naar scherm voor meer informatie.

## Module-import

XSCRIPTCONTEXT wordt niet voorzien voor geïmporteerde 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.

Functies | Omschrijving | Toegewezen in Basic als
absolutize() | Retourneert een absolute URL van het bestand van de gegeven URL's. |
createUnoStruct() | Creates a UNO struct or exception given by typeName. | CreateUNOStruct()
fileUrlToSystemPath() | Retourneert een systeempad. | 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. | See API constant groups
isInterface() | Returns True, when obj is a class of a UNO interface. |
systemPathToFileUrl() | Returns a file URL for the given system path. | ConvertToURL()

LibreLogo and TableSample installation shared scripts use uno.py module.

## Meer Python-Basic voorbeelden

Python UNO | Basic UNO features
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService()
See Opening a Dialog | CreateUnoDialog()
See Creating a Listener | CreateUnoListener()
See UNO data types | 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

## Een ingebedde module importeren

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):
                    """ load library and import module

                    Adapted from 'Bibliothèque de fonctions' by Hubert Lambert
                    op https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                    doc = XSCRIPTCONTEXT.getDocument()  # current document
                    url = uno.fileUrlToSystemPath( \
                        '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                    if not url in sys.path:  # add path if necessary
                        sys.path.insert(0, url)  # doclib takes precedence
                    if module_name:  # import if requested
                        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

Verwante onderwerpen

Basic UNO Objects, Functions and Services

Python Modules Importeren

Input/Output to Screen

LibreOffice Python-scripts Help