Interagir avec Libreoffice avec des Scripts Python
SOMMAIRE
Introduction
II Installation de l’extension APSO et du module ScriptForge
III Utilisation de l’extension pour créer une macro
IV Conclusion
Introduction
Dans ce document nous allons voir comment intéragir sur LibreOffice avecc un script Python en installant l’extension APSO dans la suite bureautique. Nous verrons comment ajouter cette exteson dans LibreOffice. Nous verrons ensuite un petit exemple de script permettant de voir comment utiliser cette extension.
II Installation de l’extension APSO et du module ScriptForge
Dans ce tutoriel nous allons voir comment utiliser l’extension APSO pour créer des macros à l’intérieur de l’application.
Deux actions sont à accomplir en vue de pouvoiir effectuer ceci :
- Installer l’extension APSO ;
- Installer le module Python « scriptforge » qui vous permettra de créer vos macros.
Pour installer cette extension dirigez-vous vers la page suivante : https://extensions.libreoffice.org/en?q=APSO&action_doExtensionSearch=Search
Vous devriez voir apparaître ceci sur votre écran :

Cliquez sur la vignette et la page de téléchargement s’affiche :

Cliquez alors sur le bouton « Download latest ».
Ceci télécharge le fichier « APSO.ext ». Une fois le fichier téléchargé, ouvrez une des applications LibreOffice et ouvrez la commande de menu « Tools » => « Extensions, vous devriez voir apparaître cette fenêtre maintenant :

Cliquez sur le bouton « Add » et une boîte de dialogue d’ouverture de fichier s’affiche alors :

Sélectionnez le fichier téléchargé et cliquez sur « Open ». Une nouvelle page s’affiche vous demandant de confirmer que vous acceptez les clauses d’utilisation de cette extension.

Cliquez sur « Accept ». L’extension apparaît alors dans la liste et vous devez alors redémarrer l’application pour finaliser l’installation de la nouvelle extension.
Maintenant que APSO est installée, il reste à instaler le module python3-scriptforge sur votre Raspberry Pi.
Dans un premier temps assurez-vous que votre système d’exploitation est à jour avec la commande suivante :
$sudo apt update
et
$sudo apt upgrade
Puis lancez cette commande pour installer le module Python :
$sudo apt install python3-scriptforge
Une fois ces deux prérequis installés, nous pouvons les utiliser.
III Utilisation de l’extension pour créer une macro
Ouvrez l’application dans laquelle vous souhaitez créer votre macro. Par exmple, ouvez l’application LibreOffice Calc. Ensuite allez dans Tools => Macros => Organize Python Scripts :

Une nouvelle fenêtre s ‘affiche :

Cliquez sur le bouton « Menu » en haut de la fenêtre

Créer des macros avec LibreOffice peut se faire de deux façon différentes :
- Soit en utilisant une extension dans les applications Libreoffice en utilisant le processus de l’application ;
- Soit en créant un script Python « autonome » qui va se connecter au processus LibreOffice par l’intermédiaire d’un pipe ou d’un socket.
Nous allons voir comment utiliser la console Python pour exécutez des commandes Python ligne par ligne. Ceci permet de tester le module ScriptForge avant de créer votre script.
Cliquez sur la commande « Python Shell » :
Une console s’affiche à l ‘écran et vous pouvez saisir des commandes Python :

Pour importer le module scriptforge et plus spécifiquement l’objet CreateScriptService utilisez la ligne de commandes suivnante :
>>>from scriptforge import CreateScriptService
Nous allons ensuite créer un document LibreOffice Writer que nous allons sauvegarder sous le dossier « Documents » sdu dossier utilisateur. Pour ce faire nous devons instancier le service « UI » :
>>>ui = CreateScriptService(‘UI’)
Pour ouvrir l’application Writer vous devez utiliser cette commande :
>>>doc = ui .CreateDocument(‘Writer’)
Vous pouvez alors constater qu’une nouvelle fenêtre LibreOffice Writer s’ouvre avec un nouveau document avec son nom par défaut.
Pour le sauvegargarder sous, utilisez la méthode « SaveAs » comme ceci :
>>>doc.SaveAs(« nom du doosier dans lequel vous souhaitez le sauvegarder »)
Voilà vous avez pu voir en quelques lignes de commandes quelques aspects essentiels concernant l’écriture de macros en utilsant la console APSO. Cette apparoche n’est pas très conviviale et il vaut mieux passer par votre éditeur Python préféré qui vous aidera à créer des scripts plus élaborés avec l’aide de l’auto-complétion.
Voyons comment créer un script Python dans un éditeur de code comme Visual Studio Code.
Les scripts externes doivent être sauvegardés dans un endroit bien précis sur votre ordinateur. Sous Linux l’emplacement par défaut est celui-ci :
/home/ « username »/.config/libreoffice/4/user/Scripts/python/

Dans votre éditeur, créer un nouveau fichier de scripts Python et sauvegardez-le dans ce dossier. Nous pouvons alors commencer à écrire notre script.
Importons dans un premier temps le sous-module CreateScriptService comme ceci :
from scriptforge import CreateScriptService
Pour qu’il soit correctement pris en charge par LibreOffice il doit avoir une structure adéquate. En effet nous devons créer une fonction de macro et la déclarer à la fin du script comme ceci :
def create_hello_writer_file(args=None):
//corp de la fonction
g_exportedScripts = (create_hello_writer_file, )
Nous devons créer un service Ui (interface utilisateur) afin de pouvoir interagir entre le document et le type d’application utilisée :
ui = CreateScriptService("UI")
Maintenant à l’intérieur de la fonction créée nous allons détailler les lignes de code qui vont nous permettre d’ajouter du texte et de sauvegarder le fichier créé physiquement sur votre ordinateur.
On crée un nouveau document vierge (qui aura comme nom par défaut « untitled 1.odt » par défaut avec le code suivant :
doc = ui.CreateDocument("Writer")
Ceci nous permet de créer le fichier conteneur physique qui sera manipulé par le système de fichier. Nous verrons tout à l’heure comment convertir simplement le fichier au format « docx ».
Pour manipuler le contenu du fichier il faut créer un autre type d’objet par l’intermédaire de l’objet Xcomponent provenant du module « uno » :
doc_component = doc.XComponent
Ensuite on va pouvoir insérer du texte à l’intérieur du document en utilisant ces deux lignes de code :
text = doc_component.getText()
text.insertString(text.End, f'Bonjour Chris \n', False)
L’opération qui suit permet de sauvegarder le fichier physiquement le fichier dans le système de fichier, sous Raspberry Pi OS cela donne ceci par exemple :
doc.SaveAs("/home/pchris/Documents/generated1.odt", overwrite=True)
Ensuite on n’oublie pas de fermer le fichier :
doc.CloseDocument()
Voilà un script très simple qui permet de générer automatiquement un document texte et de la manipuler. Toute interaction avec LibreOffice Writer se fait par l’intermédaire de l’ojet Xcomponent st ses sous-objets. L’objet Text que nous avons manipulé ici n’en est qu’un parmi tant d’autres.
Voilà le script complet :
from scriptforge import CreateScriptService
#On crée une instance de service UI pour interagir avec le fichier LibreOffice et le document physique ui = CreateScriptService("UI") def create_hello_writer_file(args=None): #Cr&ation d'un document Libre Office Writer doc = ui.CreateDocument("Writer") #Création d'un objet composant uno doc_component = doc.XComponent #Création d'un objet de type texte pour insérer du texte automatisé dans le document texte_a_inserer = doc_component.getText() texte_a_inserer.insertString(texte_a_inserer.End, f'Bonjour Chris \n', False) #Sauvegarde physique du document doc.SaveAs("/home/username/Documents/generated1.odt", overwrite=True) #Fermeture du document doc.CloseDocument() g_exportedScripts = (create_hello_writer_file, )
Normalement, le script devrait être visible dans l’application LibreOffice, en navigant dans le menu ‘Tools » => « Macros » => « Organize Macros » => Python

Il suffit ensuite de cliquer sur le bouton « Run » pour lancer l’exécution du script.
IV Conclusion
Dans ce document, vous avez pu voir comment générer un fichier LibreOffice Writer automatiquement à partir d’un script Python en utilisant le module ScriptForge. Celui-ci met à disposition un ensemble d’objets qui permettent de passer outre la complexité du module « uno ». Nous avons vu comment générer nos scripts à l’intérieur même d’une application LibreOffice et en utilisant un script autonome écrit à partir de votre éditeur de script.
