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.

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


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

Se Åpning av en dialog

CreateUnoDialog()

Se Opprettelse av lytter

CreateUnoListener()

Se UNO-datatyper

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


Importering av innebygget modul

På samme måte som LibreOffice Basic som støtter surfing og dynamisk lasting av biblioteker, kan Python-biblioteker utforskes og importeres etter behov. For mer informasjon om biblioteksbeholdere, besøk LibreOffice Application Programming Interface (API) eller last ned 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!