Programmering med Python-skript

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.

XSCRIPTCONTEXT Global Variabel

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:

Metoder

Beskrivelse

Mappet i Basic som

getDocument()

Dokumentreferansen som skriptet kan operere på.

ThisComponent

getDesktop()

Dokumentreferansen som skriptet kan operere på.

StarDesktop

getComponentContext()

Komponentkonteksten som skriptet kan bruke til å lage andre UNO komponenter.

GetDefaultContext


HelloWorld ogUtnytt installerte delte skript illustrerer UNO-relaterte makroer som bruker XSCRIPTCONTEXT globale variabler.

tip

Python standard utdatafil er ikke tilgjengelig når du kjører Python-makroer fra Verktøy-menyen - Makroer - Kjør Makro-menyelementer. Se Input/Output to Screen for mer informasjon.


Modul import

warning

XSCRIPTCONTEXT er ikke tilgjengelig for importerte moduler.


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.

Funksjoner

Beskrivelse

Mappet i Basic som

absolutize()

Returnerer en absolutt filadresse fra de oppgitte nettadressene.

createUnoStruct()

skaper en UNO-strukt eller unntak gitt av typeNavn.

CreateUNOStruct()

fileUrlToSystemPath()

Returnerer en system sti.

ConvertFromURL()

getClass()

Returnerer klassen av et konkret UNO-unntak, strukt eller grensesnitt.

getComponentContext()

Returnerer UNO-komponentkonteksten som brukes til å initialisere Python-runtime.

GetDefaultContext()

Enum()

getConstantByName()

Ser opp verdien av en IDL konstant ved å gi sitt eksplisitte navn.

Se API konstant grupper

isInterface()

Returnerer True, når obj er en klasse med et UNO-grensesnitt.

systemPathToFileUrl()

Returnerer en filadresse for den oppgitte systembanen.

ConvertToURL()


Delte skript i LibreLogo og TableSample bruker uno.py-modul.

Flere Python-Basic-eksempler

Python UNO

Basic UNO-egenskaper

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

See Opening a Dialog

CreateUnoDialog()

See Creating a Listener

CreateUnoListener()

Se UNO data typer

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


Importere en innebygget modul

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

Importering av en Python-dokument-integrert modul er illustrert nedenfor, unntakshåndteringen er ikke detaljert:


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                """ last inn biblioteket og importer modul
                
                Hentet fra «Bibliothèque de fonctions» av Hubert Lambert
                på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # gjeldende dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                hvis ikke url i sys.path:  # legg til sti hvis nødvendig
                    sys.path.insert(0, url)  # doc har forrang
                if module_name:  # importer dersom det er nødvendig
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # legg til <lib> sti + import <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Supporter oss!