Outils pour utilisateurs

Outils du site


libreoffice_macro

Ceci est une ancienne révision du document !


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.

https://gitlab.com/jmzambon/apso

Include Python Path Extension for LibreOffice

Sources et resources

libreoffice_macro.1705605372.txt.gz · Dernière modification : 2024/01/18 19:16 de tom