Innhald

# 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 utleia 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() | Komponentsamanhengen som skriptet kan bruka 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, funksjonar og variablar. Felles snuttar med Python- og UNO-funksjonar som kan brukast om igjen må lagrast i Mine 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-struct eller eit unntak gjeve 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()

Dei førehandsinstallerte skripta LibreLogo, Namngjevne område, SetCellColor og TableSample brukar uno.py-modulen.

## 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()
Sjå Laga ein lyttar | CreateUnoListener()
Sjå UNO datatypar | CreateUnoValue() CreateObject()
Bruk samanlikningsoperatorane «==» eller «!=» | 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 som støttar surfing og dynamisk lasting av bibliotek, kan Python-biblioteka utforskast og importerast om ønskjeleg. Du kan finna meir om bibliotekbehaldarar i LibreOffice Application Programming Interface (API) eller lasta ned LibreOffice Software Development Kit (SDK).

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

                import uno, sys, zipimport

                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

Importera Phyton-modular

Input/Output til skjerm

LibreOffice Pythonskript hjelp