Outils pour utilisateurs

Outils du site


libreoffice_macro

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.

https://gitlab.com/jmzambon/apso

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:

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

libreoffice_macro.txt · Dernière modification : 2024/01/29 17:08 de tom