Programmering med Python-scripts

En Python-makro er en funktion i en .py-fil, der er identificeret som et modul. I modsætning til LibreOffice Basic og dets dusin UNO-objektfunktioner eller services bruger Python-makroer XSCRIPTCONTEXT UNO enkelt-objekter, der deles med JavaScript og Beanshell. Den g_exportedScripts globale tupel opregner udtrykkeligt valgbare makroer i et modul. Python-moduler har autonom kode-logik og er uafhængige af hinanden.

XSCRIPTCONTEXT global variabel

Ægte Basic UNO-faciliteter kan udledes fra XSCRIPTCONTEXT globale variable. Se også LibreOffice API for en komplet beskrivelse af XSCRIPTCONTEXT. XSCRIPTCONTEXT metoder opsummeres som:

Metoder

Beskrivelse

Tilsvarende i Basic

getDocument()

Den dokumenthenvisning, som scriptet kan udføres på.

ThisComponent

getDesktop()

Den skrivebordshenvisning, som scriptet kan udføres på.

StarDesktop

getComponentContext()

Den komponentsammenhæng, som scriptet kan bruge til at oprette andre uno-komponenter.

GetDefaultContext


HelloWorld og Capitalise -installationer delte scripts illustrerer UNO-relaterede makroer, der anvender XSCRIPTCONTEXTs globale variabel.

tip

Pythons standard output-fil er ikke tilgængelige, når du udfører Python-makroer fra menuen Funktioner - Makroer - Udfør makro. Se mere information i Input/Output-skærm.


Import af moduler

warning

XSCRIPTCONTEXT bliver ikke tilføjet til importerede moduler.


LibreOffice Basic-biblioteker indeholder klasser, rutiner og variable; Python-moduler indeholder klasser, funktioner og variable. Almindelige stykker af genbrugelige Python eller UNO-funktioner skal lagres i Mine makroer i (User Profile)Scripts/python/pythonpath. Python-biblioteker hjælper til med at organisere modulerne for at udgå sammenfaldende modulnavne. Du skal importere uno.py i delte moduler.

Ægte BASIC UNO-faciliteter kan udledes med uno.py-modulet. Brug Pythons interaktive skal til at få en fuldstændig modulbeskrivelse med Python-kommandoerne dir() og help().

Funktioner

Beskrivelse

Tilsvarende i Basic

absolutize()

Returnerer en absolut fil-url fra de givne url'er.

createUnoStruct()

Opretter en UNO-struct eller undtagelse givet med typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Returnerer en systemsti.

ConvertFromURL()

getClass()

Returnerer klassen for en konkret UNO-undtagelse, -struct eller -grænseflade.

getComponentContext()

Returnerer den UNO-komponentkontekst, der blev brugt til initialisere Python-kørselsmiljøet.

GetDefaultContext()

Enum()

getConstantByName()

Slår værdien af en IDL-konstant op ved at give dens udførlige navn.

Se API-konstant grupperne

isInterface()

Returnerer Sand, når obj er en klasse i en UNO-grænseflade.

systemPathToFileUrl()

Returnerer en fil-URL til den givne systemsti.

ConvertToURL()


De forhåndsinstallerede LibreLogo-scripts NamedRanges, SetCellColor og TableSample bruger uno.py-modulet.

Flere Python-Basic-eksempler

Python UNO

Bacic UNO-funktioner

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Se Åbning af en dialog

CreateUnoDialog()

Se Oprettelse af en listener

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


Importere et indbygget modul

Ligesom LibreOffice Basic understøtter gennemsøgning og dynamisk hentning af biblioteker, kan Python-biblioteker udforskes og importeres efter behov. For mere information om biblioteks-containere, besøg LibreOffice Application Programming Interface (API) eller hent LibreOffice Software Development Kit (SDK).

Import at et indbygget Python-dokumentmodul er illustreret nedenfor, undtagelseshandling er ikke detaljeret beskrevet:


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ indlæs bibliotek og importer modul
                
                Tilpasset efter 'Bibliothèque de fonctions' af Hubert Lambert
                på https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # aktuelt dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                hvis ikke url i sys.path:  # tilføj sti om nødvendigt
                    sys.path.insert(0, url)  # doclib har forrang
                if module_name:  # importer om nødvendigt
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # tilføj <lib> sti + import <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Støt os venligst!