Hilfe für LibreOffice 24.8
Ein Python-Makro ist eine Funktion in einer .py-Datei, die als Modul identifiziert wird. Im Gegensatz zu LibreOffice Basic und seinem Dutzend Funktionen oder Dienste von UNO-Objekten verwenden Python-Makros das UNO-Einzelobjekt XSCRIPTCONTEXT, gemeinsam mit JavaScript und BeanShell. Das globale Tupel g_exportedScripts listet explizit auswählbare Makros aus einem Modul auf. Python-Module verfügen über eine autonome Codelogik und sind voneinander unabhängig.
Echte grundlegende UNO-Funktionen können aus der globalen Variablen XSCRIPTCONTEXT abgeleitet werden. In der LibreOffice-API finden Sie eine vollständige Beschreibung von XSCRIPTCONTEXT. XSCRIPTCONTEXT-Methoden zusammengefasst sind:
| Methoden | Beschreibung | In Basic als zugeordnet | 
|---|---|---|
| getDocument() | Die Dokumentreferenz, mit der das Skript arbeiten kann. | ThisComponent | 
| getDesktop() | Die Desktop-Referenz, auf der das Skript ausgeführt werden kann. | StarDesktop | 
| getComponentContext() | Der Komponentenkontext, mit dem das Skript andere Uno-Komponenten erstellen kann. | GetDefaultContext | 
Die gemeinsam genutzten Installationsskripte HelloWorld und Capitalize veranschaulichen UNO-bezogene Makros, welche die globale Variable XSCRIPTCONTEXT verwenden.
Die Python-Standardausgabedatei ist nicht verfügbar, wenn Python-Makros über gestartet werden. Weitere Informationen finden Sie unter Eingabe / Ausgabe auf dem Bildschirm.
XSCRIPTCONTEXT wird importierten Modulen nicht zur Verfügung gestellt.
LibreOffice Basic-Bibliotheken enthalten Klassen, Routinen und Variablen, Python-Module enthalten Klassen, Funktionen und Variablen. Allgemeine Teile wiederverwendbarer Python- oder UNO-Funktionen müssen in Meine Makros in (Benutzerprofil)/Scripts/python/pythonpath gespeichert werden. Python-Bibliotheken helfen beim Organisieren von Modulen, um Kollisionen von Modulnamen zu verhindern. Importieren Sie uno.py in gemeinsam genutzte Module.
Echte BASIC UNO-Einrichtungen können mithilfe des Moduls uno.py abgeleitet werden. Lesen Sie Interaktive Python-Shell, um eine vollständige Modulbeschreibung mit den Python-Befehlen dir() und help() zu erhalten.
| Funktionen | Beschreibung | In Basic zugeordnet als | 
|---|---|---|
| absolutize() | Gibt eine absolute Datei-URL von den angegebenen URLs zurück. | |
| createUnoStruct() | Erstellt eine UNO-Struktur oder -Ausnahme, die durch typeName angegeben wird. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Gibt einen Systempfad zurück. | ConvertFromURL() | 
| getClass() | Gibt die Klasse einer konkreten UNO-Ausnahme, -Struktur oder -Schnittstelle zurück. | |
| getComponentContext() | Gibt den UNO-Komponentenkontext zurück, der zum Initialisieren der Python-Laufzeit verwendet wird. | GetDefaultContext() | 
| Enum() getConstantByName() | Sucht den Wert einer IDL-Konstante anhand ihres expliziten Namens. | Siehe API-Konstantengruppen | 
| isInterface() | Gibt True zurück, wenn obj eine Klasse einer UNO-Schnittstelle ist. | |
| systemPathToFileUrl() | Gibt eine Datei-URL für den angegebenen Systempfad zurück. | ConvertToURL() | 
Die vorinstallierten Skripte LibreLogo, NamedRanges, SetCellColor und TableSample verwenden das Modul uno.py.
| Python UNO | Basic UNO-Funktionen | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| Siehe Einen Dialog öffnen | CreateUnoDialog() | 
| Siehe Einen Listener erstellen | CreateUnoListener() | 
| Siehe UNO-Datentypen | 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 | 
Ebenso wie LibreOffice-Basic das Durchsuchen und dynamische Laden von Bibliotheken unterstützt, können auch Python-Bibliotheken durchforscht und auf Anfrage importiert werden. Für mehr Informationen über Bibliothekscontainer besuchen Sie LibreOffice Application Programming Interface (API) oder laden Sie das LibreOffice Software Development Kit (SDK) herunter.
Das Importieren eines eingebetteten Moduls für ein Python-Dokument wird unten veranschaulicht, die Ausnahmebehandlung wird nicht detailliert beschrieben:
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ Bibliothek laden und Modul importieren
                
                Adaptiert aus 'Bibliothèque de fonctions' von Hubert Lambert
                unter https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # aktuelles Dokument
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path: # Falls nötig, Pfad hinzufügen
                    sys.path.insert(0, url)  # doclib hat Vorrang
                if module_name:  # auf Anfrage importieren
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # Pfad <lib> hinzufügen + <module> importieren
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros