Contenu

# Programmer avec des Scripts Python

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.

## Variable globale XSCRIPTCONTEXT

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 Outils - Macros - Exécuter la macro . Reportez-vous à Entrées/ Sorties écran pour plus d'information.

## Import de Module

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.

## Plus d'exemples Python-Basic

Python UNO | Fonctions UNO Basic
--- | ---
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService()
Voir Ouvrir une boîte de dialogue | CreateUnoDialog()
Voir Créer un auditeur (listener) | 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

## Importer un module intégré

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

Rubriques connexes

Objets, Fonctions et Services Basic UNO

Importer des modules Python

Entrées/Sorties écran

Aide des scripts LibreOffice Python