Indhald
Innhaldsliste 🔎︎

# Programmering med Python-skript

Ein Python-makro er ein funksjon inne i ei .py-fil identifisert som ein modul. I motsetnad til LibreOffice Basic og med titals UNO-objektfunksjonar eller tenester , brukar Python makroar XSCRIPTCONTEXT UNO enkeltobjekt delt med JavaScript og Beanshell. g_exportedScripts viser ei ordna liste over makroar som kan veljast frå ein modul. Python-moduler har sjølvstendig kodelogikk uavhengig av kvarandre.

## XSCRIPTCONTEXT global variabel

Basic UNO-funksjonar kan verta utleidde frå dei globale variablane XSCRIPTCONTEXT. Sjå LibreOffice API for ein fullstendig omtale av XSCRIPTCONTEXT (på engelsk). XSCRIPTCONTEXT-metodane kan oppsummerast som:

Metodar | Skildring | Brukt i Basic som
getDocument() | Dokumenttilvisinga som skriptet kan brukast på. | ThisComponent
getDesktop() | Datamaskinreferansen som skriptet kan brukast på. | StarDesktop
getComponentContext() | Komponentsamahengen som skriptet kan brukast på for å laga andre UNO-komponentar. | GetDefaultContext

Dei delte skripta i installasjonane HelloWorld og Capitalise syner UNO-relaterte makroar som brukar XSCRIPTCONTEXT sin globale variabel.

Standard utdatafil for Python er ikkje tilgjengeleg når du køyrer Python-makroar frå Verktøy → Makroar → Køyr Makro. Du finn meir om dette på Input/Output to Screen.

## Modul-import

XSCRIPTCONTEXT er ikkje tilgjengeleg for importerte modular.

Basicbilblioteka i LibreOffice inneheld klassar, rutinar og variablar. Pythonmodulane inneheld klassar, fumksjonar og variablar. Felles snuttar med Python- og UNO-funksjonar som kan brukast om igjen må lagrast i Mins makroar i (Brukarprofil)/Scripts/python/pythonpath. Pythonbiblioteka hjelper til med å organisera modulane slik at det ikkje vert namnekollisjonar. Importer uno.py inne i delte modular.

Ekte BASIC UNO-fasilitetar kan greiast ut ved å bruka modulen uno.py. Bruk Python interactive shell for å få ei fullstendig modulbeskriving ved å bruka Pythonkommandoane dir() og help().

Funksjonar | Beskriving | Brukt i Basic som
absolutize() | Returnerer ei absolutt filadresse frå dei oppgjevne nettadressene. |
createUnoStruct() | Lagar ein UNO-strukt eller eit unnatak gieve av typeNamn. | CreateUNOStruct()
fileUrlToSystemPath() | Returnerer ein systemsti. | ConvertFromURL()
getClass() | Returnerer klassen av eit konkret UNO-unntak, strukt eller grensesnitt. |
getComponentContext() | Returnerer UNO-komponentkonteksten som vert brukt til å setja opp Python-Runtime. | GetDefaultContext()
Enum() getConstantByName() | Slår opp verdien av ein IDL-konstant ut frå det eintydige namnet. | Sjå gruppene API-konstant
isInterface() | Returnerer SANN, når obj er ein klasse med eit UNO-grensesnitt. |
systemPathToFileUrl() | Returnerer ei filadresse for den gjevne systemstien. | ConvertToURL()

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

## Fleire Python-Basic-prøver

Python UNO | Basic UNO-eigenskapar
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService()
Opna ein dialog | CreateUnoDialog()
See Laga ein lyttar | CreateUnoListener()
Sjå UNO datatypar | 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

## Importera ein innebygd modul

På same måte som LibreOffice Basic har støtte for søkjing og dynamisk lasting etter behov, kan Python-biblioteka visast når det er behov for det. Du finn meir om bibliotekbehaldarar på LibreOffice Application Programming Interface (API) eller last ned LibreOffice Software Development Kit (SDK).

Nedanfor dinn du ein illustrasjon som viser korleis du kan importera ein innebygd modul i Python. Unntakshandsaminga er ikkje detaljert:

                import uno, sys

                def load_library(library_name: str, module_name=None):
                    """ last inn biblioteket og importer modul

                    Henta frå «Bibliothèque de fonctions» av Hubert Lambert
                    på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                    doc = XSCRIPTCONTEXT.getDocument()  # gjeldande dokument
                    url = uno.fileUrlToSystemPath( \
                        '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                    viss ikkje adresse i sys.path:  # legg til ein sti om nødvendig
                        sys.path.insert(0, url)  # doclib har forrang
                    if module_name:  # importer viss det er spørsmål om det
                        return zipimport.zipimporter(url).load_module(module_name)

                def import_embedded_python():
                    ui = load_library("my_gui",'screen_io')  # legg til <lib>-st + importer <module>
                    ui.MsgBox(sys.modules.keys())

                g_exportedScripts = (import_embedded_python,)  # Public macros

Liknande emne

Basic UNO Objects, Functions and Services

Importerer Phyton-modular

Input/Output til skjerm

LibreOffice Pythonskript hjelp