Accueil
» Conseils PC
»
Exécuter du code Python dans Calc via le système de macros de LibreOffice
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.
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 :
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.
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.
Ouvrez une feuille de calcul de test dans Calc. Utilisez une copie ou un classeur vierge lors du développement.
Choisissez Outils > Macros > Exécuter la macro .
Dans la liste des bibliothèques, développez Mes macros , choisissez le module Python et sélectionnez hello_calcparmi les noms de macros.
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électionnez la fonction exportée hello_calc sous Mes macros, puis exécutez-la depuis Calc.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.