Exécuter du code Python dans Calc via le système de macros de LibreOffice

Si un script Python s'exécute depuis votre terminal mais ne peut ni lire ni modifier la feuille de calcul ouverte dans Calc, il s'exécute probablement en dehors de LibreOffice. Une macro Python Calc doit s'exécuter dans le processus LibreOffice, où LibreOffice fournit le contexte du document actif. Enregistrez le script comme module dans votre dossier de scripts Python utilisateur, exportez sa fonction g_exportedScriptset lancez-la depuis la boîte de dialogue des macros de Calc.

Voici la méthode la plus simple pour automatiser une petite tâche liée au classeur ouvert. L'aide actuelle de LibreOffice concernant les scripts Python décrit à la fois les macros intégrées et les scripts Python externes ; les étapes ci-dessous utilisent la méthode intégrée.

Pourquoi un script Python classique ne détecte-t-il pas la feuille de calcul ouverte ?

LibreOffice expose le document courant à une macro Python en cours d'exécution via la variable globale `sys.py` XSCRIPTCONTEXT. Un script lancé avec votre pythoncommande habituelle constitue un processus distinct ; par conséquent, cette variable globale n'est pas automatiquement disponible. Il peut néanmoins communiquer avec LibreOffice, mais cela nécessite l'établissement d'une connexion UNO à un processus bureautique déjà en cours d'exécution. Pour une première macro, exécutez plutôt la fonction directement dans LibreOffice.

Une macro Python est une fonction appartenant à un .pymodule. Le g_exportedScriptstuple du module indique à LibreOffice les fonctions à afficher dans sa liste de macros. Ces détails sont documentés dans le guide de programmation Python de LibreOffice .

Comment ajouter une macro Python à Calc ?

1. Trouvez le dossier des scripts Python de l'utilisateur

Utilisez le dossier « Mes macros » si vous souhaitez un script exécutable depuis n’importe quel document LibreOffice ouvert de votre compte utilisateur. LibreOffice indique l’emplacement de ce dossier %APPDATA%\LibreOffice\4\user\Scripts\pythonsous Windows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux et macOS. Si les Scripts/pythondossiers n’existent pas, créez-les. La documentation relative à l’emplacement des scripts explique également les autres conteneurs de macros : les macros d’application et les macros intégrées à un document.

Un fichier Python nommé hello_calc.py dans le dossier Scripts/python de l'utilisateur LibreOffice
Placez le module macro dans le dossier Scripts/python de l'utilisateur afin que LibreOffice puisse le répertorier sous Mes macros.

Les macros d'un document sont stockées dans un fichier spécifique et ne sont accessibles que lorsque ce document est ouvert. Pour un usage personnel et réutilisable, le dossier « Mes macros » est généralement plus facile à gérer. Évitez de modifier le dossier des macros global de LibreOffice, car cela peut nécessiter des droits d'administrateur.

2. Créez et exportez une petite fonction de test

Ouvrez un éditeur de texte brut, créez un hello_calc.pyfichier dans le dossier ci-dessus et ajoutez :

def hello_calc(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets[0]
    sheet.getCellRangeByName("A1").setString("Hello from Python")

g_exportedScripts = (hello_calc,)

Cette fonction récupère le document actuellement connecté à l'appel de macro, sélectionne sa première feuille et écrit une chaîne de caractères anodine en A1. La dernière ligne est importante : sans le tuple exporté, la fonction risque de ne pas apparaître comme une macro exécutable. Enregistrez le fichier au format texte brut avec l' .pyextension .txt, et non au format RTF ou avec l'extension .txt .py.txt.

Code de macro Python utilisant XSCRIPTCONTEXT et listant hello_calc dans g_exportedScripts
La fonction exportée utilise XSCRIPTCONTEXT pour accéder au document ouvert et écrire une valeur de test dans la cellule A1.

LibreOffice fournit XSCRIPTCONTEXTcette variable au module macro. Cependant, elle n'est pas automatiquement transmise aux modules importés par votre code ; veillez donc à ce que votre premier test reste autonome. Si vous répartissez ultérieurement les fonctions réutilisables dans d'autres modules, suivez les recommandations de LibreOffice concernant l'importation de modules Python .

3. Ouvrez un fichier Calc et exécutez la fonction exportée.

  1. Ouvrez une feuille de calcul de test dans Calc. Utilisez une copie ou un classeur vierge lors du développement.
  2. Choisissez Outils > Macros > Exécuter la macro .
  3. Dans la liste des bibliothèques, développez Mes macros , choisissez le module Python et sélectionnez hello_calcparmi les noms de macros.
  4. Cliquez sur Exécuter .

Cette même fonction peut être lancée depuis l'extension APSO, recommandée par LibreOffice pour l'exécution de scripts Python en interne et qui fournit également un interpréteur Python. APSO n'est pas nécessaire pour le flux d'exécution de macros de base décrit ici.

Sélecteur de macros LibreOffice avec hello_calc mis en surbrillance sous Mes macros et le bouton Exécuter visible
Sélectionnez la fonction exportée hello_calc sous Mes macros, puis exécutez-la depuis Calc.
LibreOffice Calc affiche « Bonjour de Python » dans la cellule A1 sélectionnée.
Une valeur visible en A1 confirme que la macro de test a atteint le document Calc et a modifié une cellule.

Que se passe-t-il si la macro est manquante ou semble ne rien faire ?

Effectuez ces vérifications dans l'ordre plutôt que de modifier les paramètres de sécurité généraux :

  • Le module n'est pas listé : vérifiez que le fichier se trouve bien dans le Scripts/pythonchemin d'accès utilisateur, qu'il possède une .pyextension et qu'il contient un g_exportedScriptstuple correctement orthographié. Rouvrez la boîte de dialogue des macros ; si LibreOffice n'affiche toujours pas le fichier ajouté, fermez-le et redémarrez-le, puis vérifiez à nouveau.
  • Le nom de la macro est manquant : assurez-vous que le tuple exporté inclut l’objet fonction, par exemple (hello_calc,). La virgule permet de définir un tuple Python à un seul élément.
  • Rien ne s'affiche dans le terminal : la sortie print()n'est pas disponible lorsque les macros Python sont exécutées depuis la boîte de dialogue standard. Le test ci-dessus écrit dans la cellule A1, le résultat est donc visible dans la feuille. Pour un débogage interactif, l'interface d'APSO affiche la sortie.
  • L'importation a échoué : l'installation d'un paquet pour votre système Python ne garantit pas que l'environnement d'exécution Python de LibreOffice puisse l'importer. Le paquet doit être disponible dans le chemin Python de l'environnement d'exécution ; la documentation officielle sur l'importation décrit les chemins des modules utilisateur et partagés. Commencez par tester la macro sans les importations optionnelles.
  • Un avertissement de sécurité s'affiche : n'exécutez que les scripts que vous avez écrits ou que vous avez vérifiés et auxquels vous faites confiance. La sécurité des macros vise à limiter le code non sécurisé ; ne baissez pas le niveau de sécurité global simplement pour exécuter une macro d'un document inconnu. Consultez les options de sécurité des macros de LibreOffice si vous avez besoin de comprendre cet avertissement.

N'utilisez l'approche par processus externe que si votre automatisation doit démarrer depuis un terminal, un planificateur de tâches ou une autre application. LibreOffice exige que vous démarriez le processus Office avec un tube nommé ou un socket et que vous vous connectiez via son pont UNO ; un script autonome classique n'est pas équivalent à une macro Calc exécutée dans le même processus.

Comment vérifier que la macro a fonctionné ?

Après avoir cliqué sur Exécuter, examinez la cellule A1 de la première feuille. Elle devrait contenir « Bonjour de Python » , et la barre de formule devrait afficher le même texte lorsque A1 est sélectionnée. Si la cellule reste inchangée, vérifiez que le classeur souhaité était actif et que la macro était bien sélectionnée dans Mes macros. Une fois ce test minimal réussi, remplacez le code de test par votre calcul réel et testez-le sur une copie du classeur avant de l'utiliser sur des données importantes.

Laisser un commentaire

Protéger le texte sélectionné de l'auteur par un mot de passe de section

Protéger le texte sélectionné de l'auteur par un mot de passe de section

Verrouillez un passage spécifique pour empêcher les modifications courantes tout en conservant le reste d'un document Writer utilisable, et découvrez quand le chiffrement de fichiers est le meilleur choix.

Rendre le texte de la feuille de calcul lisible en mode sombre de LibreOffice Calc

Rendre le texte de la feuille de calcul lisible en mode sombre de LibreOffice Calc

Corrigez le texte difficilement lisible d'une feuille de calcul en vérifiant le thème, la couleur de police des cellules, les remplissages et la mise en forme conditionnelle dans Calc.

LibreOffice Calc affiche les formules sous forme de texte ? Restaurer les résultats

LibreOffice Calc affiche les formules sous forme de texte ? Restaurer les résultats

Découvrez pourquoi Calc affiche le texte des formules au lieu des valeurs calculées et corrigez le mode d'affichage, les cellules au format texte, les apostrophes ou les résultats obsolètes.

Fusionnez les lettres Writer avec un logo et des champs de feuille de calcul

Fusionnez les lettres Writer avec un logo et des champs de feuille de calcul

Créez un publipostage réutilisable avec Writer, en utilisant les données des destinataires de Calc et une image intégrée partagée, puis prévisualisez et enregistrez les lettres personnalisées.

Limiter les diagnostics optionnels et mettre à jour les données dans LibreOffice

Limiter les diagnostics optionnels et mettre à jour les données dans LibreOffice

Désactivez les statistiques de mise à jour optionnelles et les invites de rapport de plantage de LibreOffice, puis vérifiez ce que couvrent ces paramètres et comment les vérifier.

Utiliser les expressions régulières dans LibreOffice Writer pour modifier du texte par lots

Utiliser les expressions régulières dans LibreOffice Writer pour modifier du texte par lots

Nettoyez l'espacement, trouvez du texte structuré et réorganisez les noms grâce aux modèles d'expressions régulières de Writer que vous pouvez prévisualiser avant de les remplacer.

Configurer l'écriture des paragraphes arabes et hébreux de droite à gauche dans Writer

Configurer l'écriture des paragraphes arabes et hébreux de droite à gauche dans Writer

Activez les commandes bidirectionnelles de Writer, définissez le flux de paragraphe RTL et vérifiez le texte arabe ou hébreu mixte sans perturber les mots et les chiffres anglais.

Restaurez Calibri et Arial dans LibreOffice sans tâtonnement

Restaurez Calibri et Arial dans LibreOffice sans tâtonnement

Installez des polices Linux compatibles avec le système métrique ou configurez les polices de secours de LibreOffice, tout en tenant compte des différences de licence et de mise en page des polices Microsoft.

Créer des PDF remplissables à partir de formulaires dans LibreOffice Writer

Créer des PDF remplissables à partir de formulaires dans LibreOffice Writer

Ajoutez des champs de texte utilisables, des cases à cocher et des listes déroulantes dans Writer, puis exportez un PDF que les destinataires pourront remplir et enregistrer.

Créer des PDF LibreOffice en conservant les polices utilisées

Créer des PDF LibreOffice en conservant les polices utilisées

Corrigez les polices manquantes ou remplacées dans les PDF de LibreOffice Writer, choisissez le bon profil d'exportation et vérifiez quelles polices sont incorporées avant de partager.