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 variabler; Python-moduler indeholder klasser, funktioner og variabler. 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 til 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()


LibreLogo og TableSample -installationer bruger delte scripts i 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


Import af et indlejret modul

I lighed med LibreOffice Basic, som understøtter bladring og dynamisk indlæsning af biblioteker, kan Python-biblioteker undersøges og importeres som ønsket. Se flere oplysninger om biblioteksdialoger på LibreOffice Application Programming Interface (API = brænseflade til applikationsprogrammering) eller download LibreOffice Software Development Kit (SDK = Udviklingssæt til software).

Import af et indlejret modul i Python-dokument er vist nedenfor, hĂĄndtering af undtagelser er ikke omfattet:


            import uno, sys
            
            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!