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

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

Relaterede emner

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

Import af Pythonmoduler

Input/Output til skræm

Hjælp til LibreOffice Pythonscripts