Aide LibreOffice 25.8
Une macro Python est une fonction d'un fichier .py, identifiée comme un module. Contrairement à Basic LibreOffice et à sa douzaine de fonctions ou services d'objets UNO , les macros Python utilisent l'objet unique UNO XSCRIPTCONTEXT , partagé avec JavaScript et BeanShell. Le tuple global g_exportedScripts répertorie explicitement les macros sélectionnables d'un module. Les modules Python possèdent une logique de code autonome et sont indépendants les uns des autres.
Les fonctionnalités primitives UNO de base peuvent être déduites de la variable globale XSCRIPTCONTEXT . Reportez-vous à l'API Description de XSCRIPTCONTEXT. Les méthodes XSCRIPTCONTEXT se résument comme suit :
| Méthodes | Description | Mappées en Basic comme | 
|---|---|---|
| getDocument() | Le document sur lequel le script peut opérer. | ThisComponent | 
| getDesktop() | Le bureau sur lequel le script peut opérer. | StarDesktop | 
| getComponentContext() | Le contexte du composant que le script peut utiliser pour créer d'autres composants UNO. | GetDefaultContext | 
Les scripts partagés HelloWorld et Capitalise du dossier d'installation illustrent les macros basées sur UNO utilisant la variable globale XSCRIPTCONTEXT .
Le fichier de sortie standard Python n'est pas disponible lors de l'exécution de macros Python depuis le menu . Reportez-vous à Entrées/ Sorties écran pour plus d'information.
Le contexte XSCRIPTCONTEXT n'est pas fourni aux modules importés.
Les bibliothèques LibreOffice Basic contiennent des classes, des routines et des variables, les modules Python contiennent des classes, des fonctions et des variables. Les éléments communs des fonctionnalités Python ou UNO réutilisables doivent être stockés dans Mes macros et boîtes de dialogue dans (User Profile)/Scripts/python/pythonpath. Les bibliothèques Python aident à organiser les modules afin d'éviter les collisions de noms de modules. Importez uno.py dans les modules partagés.
Les fonctionnalités BASIC UNO primitives peuvent être déduites à l'aide du module uno.py. Utilisez Shell interactif Python pour obtenir une description complète du module en utilisant les Commandes Python dir() et help().
| Fonctions | Description | Mappées en Basic comme | 
|---|---|---|
| absolutize() | Renvoie une URL de fichier absolue à partir des URL données. | |
| createUnoStruct() | Crée une structure UNO ou une exception donnée par typeName. | CreateUNOStruct() | 
| fileUrlToSystemPath() | Renvoie un chemin système. | ConvertFromURL() | 
| getClass() | Renvoie la classe d'une exception, d'une structure ou d'une interface UNO concrète. | |
| getComponentContext() | Renvoie le contexte du composant UNO utilisé pour initialiser le runtime Python. | GetDefaultContext() | 
| Enum() getConstantByName() | Recherche la valeur d'une constante IDL en donnant son nom explicite. | Voir les groupes de constantes API | 
| isInterface() | Renvoie True, lorsque obj est une classe d'une interface UNO. | |
| systemPathToFileUrl() | Renvoie une URL de fichier pour le chemin système donné. | ConvertToURL() | 
Les scripts préinstallés LibreLogo, NamedRanges, SetCellColor et TableSample utilisent le module uno.py.
| Python UNO | Fonctions UNO Basic | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| CreateUnoDialog() | |
| CreateUnoListener() | |
| Voir types de données UNO | CreateUnoValue() CreateObject() | 
| Utilisez les opérateurs de comparaison « == » ou « != » | 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 | 
Comme pour LibreOffice Basic qui prend en charge la navigation et le chargement dynamique des bibliothèques, les bibliothèques Python peuvent être explorées et importées à la demande. Pour plus d'informations sur les conteneurs de bibliothèque, visitez l'interface de programmation d'application LibreOffice (API) ou téléchargez le Kit de développement logiciel LibreOffice (SDK).
L'import d'un module intégré de document Python est illustré ci-dessous, la gestion des exceptions n'est pas détaillée :
            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                "" "Charge la bibliothèque et importe le module
                
                Adapté de  'Bibliothèque de fonctions' par Hubert Lambert
                à https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # document actuel
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # ajoute le chemin si nécessaire
                    sys.path.insert(0, url)  # doclib a priorité
                if module_name:  # importe si requis
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # ajoute chemin  <lib>  + importe <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros