Innhold

# Programmering med Python-skript

En Python-makro er en funksjon i en .py-fil, identifisert som en modul. I motsetning til LibreOffice Basic og dets dusin av UNO objekter funksjoner eller tjenester , Python makroer bruker XSCRIPTCONTEXT UNO enkelt objekt, delt med JavaScript og BeanShell. g_exportedScripts global tuple viser eksplisitt valgbare makroer fra en modul. Python-moduler har autonom kodelogikk, og er uavhengige av hverandre.

## XSCRIPTCONTEXT Global Variabel

Ekte Basic UNO-fasiliteter kan utledes fra XSCRIPTCONTEXT global variabel. Referer til LibreOffice API for a komplett beskrivelse av XSCRIPTCONTEXT. XSCRIPTCONTEXT metoder sammenfattet som:

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 Grunnleggende biblioteker inneholder klasser, rutiner og variabler, Python-moduler inneholder klasser, funksjoner og variabler. Vanlige deler av gjenbrukbare Python- eller UNO-funksjoner må lagres iMine makroer i (Brukerprofil)/Scripts/python/pythonpath. Python-biblioteker hjelper til med å organisere moduler for å forhindre modulkollisjon. Importer uno.py i delte moduler.

Ekte BASIC UNO-fasiliteter kan utledes ved hjelp av uno.py -modulen. Bruk Python interaktivt skall for å få en komplett modulbeskrivelse ved hjelp av dir () og hjelp () Python-kommandoer.

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 å igangsette Python-kjøretidsrutine. | 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()

LibreLogo, NamedRanges, SetCellColor og TableSample forhåndsinstallerte skript bruker uno.py-modulen.

## Flere Python-Basic-eksempler

Python UNO | Basic UNO-egenskaper
--- | ---
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService()
Se Åpning av en dialog | CreateUnoDialog()
Se Opprettelse av lytter | CreateUnoListener()
Se UNO-datatyper | CreateUnoValue() CreateObject()
Bruk "==" eller "!=" sammenligningsoperatorer | 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 innebygd modul

På samme måte som LibreOffice Basic som støtter blaing og dynamisk lasting av biblioteker, kan Python-biblioteker utforskes og importeres på forespørsel. For mer informasjon om bibliotekbeholdere, besøk LibreOffice Applikasjonsprogrammeringsgrensesnitte (API) eller last ned LibreOffice Programvareutviklingssett (SDK).

Import av en innebygd Python-dokument-modul er illustrert nedenfor, unntakshåndtering er ikke beskrevet detaljert:

                import uno, sys, zipimport

                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 Objekter, Funksjoner og Tjenester

Importerer Phyton Moduler

Inndata/visning til skjerm

LibreOffice Python Skript Hjelp