Ceci est une ancienne révision du document !
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. Par defaut, seul BASIC est disponible.
Python
Résumé de l'article: https://www.debugpoint.com/first-python-macro-libreoffice/
Pour utiliser Python pour programmer des macros, il faut installer le script:
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 éxé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
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
https://www.youtube.com/watch?v=pHlLdyJz2sE
https://www.youtube.com/watch?v=d5Mga1TibJc