Innhold
Innholdsliste 🔎︎

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

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.

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

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

Lignende emner

Basic UNO Objects, Functions and Services

Importerer Phyton Moduler

Innput/visning til skjerm

LibreOffice Python Skript Hjelp