Hello
Comme il s'agit de fichiers ods pourquoi ne pas employer LibreOffice qui permet d'utiliser du python comme langage de programmation. En plus dans les versions récentes de LibreOffice (>= 7.2) il y a une bibliothèque intégrée (
ScriptForge) qui permet de simplifier la programmation.
Voici un script python LibreOffice utilisant
scriptForge qui :
1 - Ouvre un fichier source ods.
2 - Crée un fichier ods, ajoute une feuille dedans (
MaFeuille) et copie dans ce fichier une plage de cellules d'une feuille du fichier source.
3 - Sauvegarde le fichier créé et ferme tous les documents ouverts par la macro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # coding: utf-8
from __future__ import unicode_literals
from scriptforge import CreateScriptService
def MacroSF():
svcUI = CreateScriptService("UI")
myDocDest = svcUI.CreateDocument("Calc")
myDocDest.InsertSheet("MaFeuille",1)
myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
myDocSrc1.CloseDocument(False)
myDocDest.CloseDocument(False)
g_exportedScripts = MacroSF, |
Cette macro fonctionne avec LibreOffice 7.3.4.2 sous Windows 11. J'ai mis la macro dans un module python de "mes Macros" de LibreOffice.
Pour manipuler les macros python dans LibreOffice, une extension est indispensable :
APSO. Dans les options d'APSO il faut désigner un éditeur pour éditer les scripts python (ex
Notepad++ ou
Geany).
On peut aussi lancer un script python de l'extérieur si l'on exécute soffice en mode écoute socket comme ceci par exemple :
l'option
--headless permet de lancer LibreOffice en mode invisible. si on veut voir ce qui se passe il faut enlever cette option.
On lance son script en utilisant le python de libreOffice :
avec le script
MonScript.py :
1 2 3 4 5 6 7 8 9 10 11
| from __future__ import unicode_literals
from scriptforge import ScriptForge, CreateScriptService
ScriptForge(hostname='localhost', port=2025)
svcUI = CreateScriptService("UI")
myDocDest = svcUI.CreateDocument("Calc")
myDocDest.InsertSheet("MaFeuille",1)
myDocSrc1 = svcUI.OpenDocument("D:\Temp\ClasseurTest.ods")
myDocDest.CopyToRange(myDocSrc1.Range("Feuille1.A1:E20"), "MaFeuille.D2")
myDocDest.SaveAs("D:\Temp\DocDest.ods", overwrite := True)
myDocSrc1.CloseDocument(False)
myDocDest.CloseDocument(False) |
Ami calmant, J.P
Partager