Exécution de scripts Python

Contenu

# Exécuter des scripts Python LibreOffice

Selon ce que vous souhaitez réaliser, vous pouvez choisir l'une des approches suivantes pour exécuter des scripts Python dans LibreOffice :

- Exécuter des scripts dans le processus LibreOffice actuel : les scripts Python sont exécutés depuis le processus LibreOffice en utilisant le menu Outils - Macros - Exécuter la macro ou l'extension APSO pour appeler des scripts utilisateurs stockés dans le dossier scripts Python. Vous pouvez également utiliser le shell APSO Python pour exécuter de manière interactive des scripts Python.

- Exécuter des scripts séparément du processus LibreOffice : Les scripts Python sont exécutés à partir d'un processus externe qui se connecte à un processus LibreOffice en cours à l'aide d'un pipe ou d'un socket.

Si vous prévoyez d'exécuter des scripts depuis le processus LibreOffice, il est recommandé d'installer l'extension APSO (Alternative Script Organizer for Python). En revanche, pour développer des scripts Python en dehors de LibreOffice, vous pouvez utiliser votre EDI Python préféré.

## Exécution de scripts depuis le processus LibreOffice

### Utilisation de l'extension APSO

Le moyen le plus simple de démarrer avec les scripts Python dans LibreOffice consiste à installer l'extension APSO. Après l'avoir installée, ouvrez n'importe quel composant LibreOffice et allez dans Outils - Macros - Organiser les scripts Python.

Dans la fenêtre principale d'APSO, allez dans Menu - Python Shell.

Vous pouvez également ouvrir APSO en utilisant le raccourci par défaut Alt+Maj+F11.

Vous pouvez maintenant commencer à saisir des commandes Python et le shell imprimera la sortie correspondante après l'exécution de chaque ligne de code.

Pour commencer à utiliser la bibliothèque ScriptForge, vous devez importer la méthode CreateScriptService, avec laquelle vous pourrez accéder aux services fournis par la bibliothèque. L'exemple ci-dessous utilise le service Basic pour afficher une boîte de message.

            from scriptforge import CreateScriptService
            bas = CreateScriptService("Basic")
            bas.MsgBox("Hello!")

Pour exécuter l'exemple ci-dessus, saisissez chaque ligne dans le shell Python, une par une, en appuyant sur la touche Entrée après avoir saisi chaque ligne de code.

Vous pouvez maintenant commencer à exécuter des commandes Python à l'aide de l'un des services ScriptForge. Par exemple, l'extrait de code ci-dessous utilise le service UI pour créer un document Writer vierge.

            ui = CreateScriptService("UI")
            doc = ui.CreateDocument("Writer")

### Création de fichiers de script Python

Vous pouvez créer vos propres fichiers Python et les modifier avec votre éditeur de texte préféré. Vous pourrez ensuite les appeler à partir de n'importe quel composant LibreOffice.

La première étape consiste à localiser l'emplacement de stockage de vos scripts utilisateur. Pour cela, reportez-vous à la page d'aide Organisation et emplacement des scripts Python.

Vous pouvez maintenant créer un fichier texte dans votre dossier de scripts utilisateur Python, par exemple mon_script.py, et commencer à saisir vos scripts.

Voici un exemple simple qui récupère la valeur numérique d'une cellule Calc et l'incrémente de 1. Il suffit de saisir le code suivant dans le fichier mon_script.py.

        from scriptforge import CreateScriptService
        doc = CreateScriptService("Calc")

        def increment_cell(args=None):
            value = doc.GetValue("A1")
            value += 1
            doc.SetValue("A1", value)

        g_exportedScripts = (increment_cell, )

Cet exemple crée la fonction increment_cell. Notez que g_exportedScripts est un tuple indiquant les fonctions qui seront affichées dans LibreOffice en tant que scripts utilisateur.

Pour exécuter ce script à l'intérieur d'un document Calc :

1. Créez ou ouvrez un fichier Calc.

2. Saisissez une valeur numérique dans la cellule "A1" de la feuille active.

3. Allez dans Outils - Macros - Exécuter des macros .

4. Choisissez Mes macros - mon_script dans le sélecteur de bibliothèques. Puis choisissez la fonction increment_cell dans la liste Nom des macros.

5. Cliquez sur Exécuter. Notez que la valeur de la cellule "A1" a été incrémentée de 1.

Vous pouvez également utiliser APSO pour exécuter des scripts Python de la même manière :

1. Ouvrez d'abord APSO en allant dans Outils - Macros - Organiser les scripts Python.

2. Dans la liste des macros, naviguez jusque Mes macros - mon_script - increment_cell.

3. Cliquez sur Exécuter.

## Exécution de scripts séparément du processus LibreOffice

### Déterminer le chemin d'installation

La première étape pour exécuter des scripts depuis un processus distinct consiste à trouver le dossier où LibreOffice est installé. Il y a plusieurs façons de procéder, mais ScriptForge offre une solution rapide pour identifier votre chemin d'installation. Pour cela, ouvrez le shell Python d'APSO et saisissez :

          from scriptforge import CreateScriptService
          fs = CreateScriptService("FileSystem")
          fs.FileNaming = "SYS"
          inst_dir = fs.InstallFolder
          print(inst_dir)

Le résultat du code ci-dessus correspond au répertoire racine où LibreOffice est installé. Vous devez maintenant ajouter le sous-dossier « program » au chemin résultant. Il s'agit du répertoire racine à partir duquel vous exécuterez les scripts Python depuis un processus distinct.

Par exemple, supposez que vous obtenez /usr/lib/libreoffice/ comme résultat de l'exécution du code Python ci-dessus. Vous devez alors considérer /usr/lib/libreoffice/program comme le chemin pour exécuter les scripts Python.

### Démarrez LibreOffice avec les paramètres pipe ou socket

Pour exécuter des scripts Python à partir d'un processus séparé, vous devez démarrer LibreOffice avec quelques options supplémentaires qui spécifient le nom du pipe ou le nom d'hôte et le port par lesquels le processus externe communiquera avec le processus du composant LibreOffice.

Ouvrez l'invite de commandes de votre système d'exploitation, naviguez jusqu'au dossier du programme de votre répertoire d'installation LibreOffice et saisissez :

Sur Linux ou macOS :

libreoffice --accept='pipe,name=aPipeName;urp;'

Sous Windows :

soffice.exe --accept='socket,host=localhost,port=2021;urp;'

comme un Flatpak :

flatpak run org.libreOffice.LibreOffice accept='socket,host=localhost,port=2021;urp;'

Chacune des commandes ci-dessus démarrera LibreOffice avec un canal de communication ouvert afin que d'autres processus puissent échanger des messages avec lui.

Notez que l'exemple précédent ouvre le centre de démarrage LibreOffice. Si vous souhaitez ouvrir un composant spécifique, par exemple Writer, vous pouvez ajouter l'option --writer à la commande, comme suit.

./soffice --writer --accept='socket,host=localhost,port=2021;urp;'

Notez les paramètres name, ou host et port, qui dans cet exemple sont respectivement aPipeName, ou localhost et 2021.

### Exécuter un shell Python externe

Lancez l'interpréteur Python depuis le dossier program situé dans votre répertoire d'installation LibreOffice. Suivez les étapes ci-dessus pour savoir comment trouver votre répertoire d'installation.

Sur Linux ou macOS :

$ cd /usr/lib/libreoffice/program

$ python

Sous Windows :

$ cd C:\\Program Files\\LibreOffice\\program\

$ python.exe

Cela ouvrira le shell Python et vous pourrez commencer à saisir des commandes qui seront exécutées par LibreOffice. Mais vous devez d'abord configurer la connexion pipe ou socket. L'instruction ScriptForge() ci-dessous doit précéder le premier appel à CreateScriptService().

Exécutez l'un des deux :

       from scriptforge import ScriptForge, CreateScriptService
       ScriptForge(pipe='aPipeName')

        from scriptforge import ScriptForge, CreateScriptService
        ScriptForge(hostname='localhost', port=2021)

Lisez la section Configuration de PYTHONPATH ci-dessous en cas d'erreurs lors de l'import de scriptforge.py ou uno.py.

La seconde ligne de code ci-dessus définit les paramètres pipe ou host et port de façon à ce que le shell Python puisse communiquer avec un processus LibreOffice en cours ouvert avec les mêmes paramètres pipe ou socket.

Vous pouvez désormais exécuter d'autres commandes Python qui pourront communiquer avec le processus LibreOffice. Par exemple :

        ui = CreateScriptService("UI")
        bas = CreateScriptService("Basic")
        doc = ui.OpenDocument("~/Documents/myFile.ods")
        bas.MsgBox(doc.DocumentType)

### Paramétrer PYTHONPATH

En fonction de la configuration de votre système d'exploitation, vous devrez définir la variable d'environnement PYTHONPATH afin d'importer la bibliothèque scriptforge.py, ce qui nécessite à son tour d'importer la bibliothèque uno. py.

Utilisez l'outil de recherche de fichiers de votre système d'exploitation pour déterminer le répertoire où se trouvent ces deux fichiers.

Par exemple, sur une installation Ubuntu par défaut, les deux fichiers peuvent se trouver à l'emplacement :

- scriptforge.py: situé dans /usr/lib/libreoffice/program

- uno.py: situé dans /usr/lib/python3/dist-packages

Dans ce cas, définissez la variable d'environnement PYTHONPATH comme suit avant de démarrer l'interpréteur Python :

export PYTHONPATH=/usr/lib/libreoffice/program:/usr/lib/python3/dist-packages

L'emplacement de ces fichiers sera différent pour chaque système d'exploitation et méthode d'installation de LibreOffice.

Rubriques connexes

Aide des scripts LibreOffice Python

Aidez-nous !