Outils pour utilisateurs

Outils du site


libreoffice_macro

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 libre_office lorsqu'ils sont dans le dossier 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 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

Sources et resources

libreoffice_macro.1705517674.txt.gz · Dernière modification : 2024/01/17 18:54 de tom