Indhold
Indholdsfortegnelse 🔎︎

# 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.

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

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

## Importing an embedded Module

Similarly to LibreOffice Basic that supports browsing and dynamic loading of libraries, Python libraries can be explored and imported on demand. For more information on library containers, visit LibreOffice Application Programming Interface (API) or download LibreOffice Software Development Kit (SDK).

Importing a Python document embedded module is illustrated below, exception handling is not detailed:

                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

Relaterede emner

Basic UNO-objekter, -funktioner og -tjenester (på engelsk)

Import af Pythonmoduler

Input/Output til skræm

Hjælp til LibreOffice Pythonscripts