Table des matières
Les macros avec LibreOffice
Version LibreOffice : 6.4.1
OS: Ubuntu 23.10
Avec LibreOffice Calc, il est possible d'éxécuter des macros, un ensemble de fonctions qui permet de manipuler et d'effectuer des opérations dans un ou plusieurs fichiers LibreOffice.
Les langages de programmation disponibles sont le BASIC, Python, JavaScript et BeanShell. Sous Ubuntu, l'installation de LibreOffice via le store d'applications installe seulement BASIC.
Pour avoir les autres langages de programmation, il faut installer les script-provider spécifiques ou réinstaller LibreOffice complétement à partir d'APT:
sudo apt install libreoffice
BASIC
Le développement de macro BASIC est integré à LibreOffice gràce à son IDE, les macros peuvent être integrées au document.
https://wiki.documentfoundation.org/images/2/2d/GS4013FR-Macros.pdf
Python
L'intéret d'utiliser Python avec LibreOffice est l'utilisation cross-platforme. LibreOffice intègre son propre interpéteur Python, différend de ceux fourni par les IDE Python.
Résumé de l'article suivant: https://www.debugpoint.com/first-python-macro-libreoffice/
Pour utiliser Python pour programmer des macros, il faut installer le script provider:
sudo apt install libreoffice-script-provider-python
Avec BASIC l'éditeur de code est fourni dans LibreOffice. Pour Python il faudrat utiliser un éditeur extérieur type Thonny
Les fichiers de macros sont détéctés par libreOffice lorsqu'ils sont dans le dossier adéquat qu'il faut créé:
~/.config/libreoffice/4/user/Scripts/python
La macro Hello Wolrd:
import uno def HelloWorldPythonCalc(): oDoc = XSCRIPTCONTEXT.getDocument() oSheet =oDoc.getSheets().getByIndex(0) oCell = oSheet.getCellByPosition(0,0) oCell.String = 'Hello World via Python' return None
Pour exécuter la macro:
Si le bouton 'Run' ou 'Éxécuter' est grisé, la syntaxe du code est probablement erroné quelque part. Éxécuter la macro dans l'éditeur Python aidera à détecter l'erreur.
Il est aussi possible d'integrer une macro à un fichier LibreOffice: http://christopher5106.github.io/office/2015/12/06/openoffice-libreoffice-automate-your-office-tasks-with-python-macros.html#pack-your-script-inside-the-document--the-opendocument-format
Pour cela on créé un script Python include_macro.py qui va ajouter myscript.py dans le document document.ods
#include_macro.py import zipfile import shutil import os import sys print("Delete and create directory with_macro") shutil.rmtree("with_macro",True) os.mkdir("with_macro") filename = "with_macro/"+sys.argv[1] print("Open file " + sys.argv[1]) macroName = sys.argv[2] shutil.copyfile(sys.argv[1],filename) doc = zipfile.ZipFile(filename,'a') doc.write(macroName, "Scripts/python/"+macroName) manifest = [] for line in doc.open('META-INF/manifest.xml'): if '</manifest:manifest>' in line.decode('utf-8'): for path in ['Scripts/','Scripts/python/','Scripts/python/'+macroName]: manifest.append(' <manifest:file-entry manifest:media-type="application/binary" manifest:full-path="%s"/>' % path) manifest.append(line.decode('utf-8')) doc.writestr('META-INF/manifest.xml', ''.join(manifest)) doc.close() print("File created: "+filename)
Éxécuter l'integration:
python include_macro.py document.ods myscript.py
Extensions Python
APSO (Alternative Script Organizer for Python )
Cette extension permet de gérer dans LibreOffice les macros Python (celles dans le dossier adéquat). Il faut avoir installé libreoffice-script-provider-python . Elle permet aussi d'éxécuter du code Python à la volé avec la console Python disponible. Elle permet aussi aussi de débuger une macro avec une librairie dédiée. Elle permet aussi aussi aussi d'intégrer une macro au document ouvert pour remplacer le script include_macro.py.
Include Python Path Extension for LibreOffice
Avec Python, il est possible de créer des environnement virtuel. Cela permet d'avoir des versions différentes de Python en paralléle et surtout des packages et des librairies spécifique à un environnement.
Cette extension permet d'ajouter un chemin à un environnement Python spécifique pour utiliser les packages de cet environnement par LibreOffice.
https://github.com/Amourspirit/libreoffice-python-path-ext/tree/main#readme
OOO Development Tools (OooDev)
Cette extension permet à des scripts Python d'être exécuté en dehors d'un document LibreOffice et d'interagir avec celui-ci. Il existe aussi l'extension oooenv qui est nécessaire pour créer un envirronement virtuel afin d'utiliser OooDevTools. Plus d'info ici.
MRI
MRI n'est pas une extension spécifique à Python mais elle permet d'inspecter les éléments d'un document LibreOffice. La version 1.1.4 ne s'installe pas avec LibreOffice 7.6.4 mais la version 1.3.4 fonctionne et est disponible sur Github
Librairies Python pour LibreOffice
Afin d'interagir avec un document LibreOffice, il est nécessaire d'utiliser l'API.
Des librairies pour intéragir avec l'API existe:
- OooDevTool, une librairie compléte
- ScriptForge, un framework plus qu'une librairie
- types-unopys, pour ajouter le typage
D'autres librairies peuvent être ajoutées à un code Python tel que Numpy ou Numexpr
JavaScript
De la même manière que pour Python, il faut installer le script_provider si JavaScript n'est pas disponible dans le menu 'Outils - Macros - Organiser les Macros':
sudo apt install libreoffice-script-provider-js
On peut ensuite créé un module et une macro via le menu de Libreoffice. Il est conseillé de passer par ce menu pour créer la macro car elle se localisera directement dans le dossier ~/.config/libreoffice/4/user/Scripts/javascript et elle sera accompagné d'un fichier parcel-descriptor.xml qui permet à LibreOffice de détecter la macro.
Il est ensuite possible d'exécuter la macro. Et le bouton d'édition ouvre l'utilitaire Rhino Javascript Debugger qui permet d'éditer la macro et de la débugger.
BeanShell
On s'en fiche non ?
Le SDK LibreOffice
Le SDK est un ensemble d'outils et de librairies pour créer des applications dans différents langages de programmation (Java, C++,..) qui pourront interagir avec LibreOffice. Pour l'installer, si LibreOffice a été installé via le store Ubuntu, il faut éxecuter la commande:
sudo apt install libreoffice-dev
Plus d'info ici:
Avancé
Il est possible de faire enormement de chose avec LibreOffice:
- Créér des extensions qui embarquent des script spécifique
- Démarrer LibreOffice avec un socket ouvert pour le contrôller depuis un autre programme
- Créer d'autre script-provider pour intégrer d'autre langages de macros.
Sources et resources
https://api.libreoffice.org/
https://extensions.libreoffice.org/en/extensions/show/apso-alternative-script-organizer-for-python
https://www.debugpoint.com/first-python-macro-libreoffice/
https://wiki.documentfoundation.org/images/4/44/CG6212FR-Macros.pdf
https://wiki.documentfoundation.org/Macros/Python_Design_Guide
https://wiki.documentfoundation.org/Macros/Python_Guide/My_first_macro
https://help.libreoffice.org/latest/fr/text/sbasic/python/python_programming.html
https://help.libreoffice.org/latest/fr/text/sbasic/python/python_ide.html
https://help.libreoffice.org/latest/fr/text/sbasic/python/python_locations.html
https://extensions.libreoffice.org/en/extensions/show/41700
https://python-ooo-dev-tools.readthedocs.io/en/main/index.html
[YouTube] Python scripts in LibreOffice Calc using the ScriptForge library
[YouTube] Macros Python pour LibreOffice Calc
https://niocs.github.io/LOBook/index.html
[YouTube] Automating LibreOffice Calc with Python by Onyeibo Oku
https://tutolibro.tech/2019/07/26/libreoffice-calc-python-programming-part-1-requirements/