slt,
Comme j'en avais parlé jadis, j'ai besoin de modifier certaines valeurs
dans des documents au format opendocument (odt).
Ne voulant pas lancer openoffice systématiquement, ni être dépendant
d'une plateforme, j'ai essayé ooopy
http://ooopy.sourceforge.net/ mais
le projet ne semble pas évoluer et ça ne fonctionne pas bien avec odt,
ça fonctionne plutôt avec sxw (ancien format openoffice). Par contrel
principe reste intéressant, il dézippe le document et l'ouvre avec
elementtree. J'ai donc utilisé cette partie et attaqué le document
directement avec elementtree et ça marche très bien :-)
Comme me l'a suggéré florent manens, j'utilise la notion de "variables"
d'openoffice plutôt que des balise textes $$xxxx, ça évite les problèmes
au cas où la balise texte serait dissociée en interne. (genre
$$xx<b>xx</b>).
C'est très simple et ça marche, voilà un boût de code pour ceux qui
seraient intéressés :
replace = {"nom":form.nom.value,
"prenom":form.prenom.value,
}
o = OOoPy(infile=os.path.join(models_path,form.model.value), outfile=os.path.join(docs_path, form.model.value))
e = o.read('content.xml')
for p in e.findall(".//{urn:oasis:names:tc:opendocument:xmlns:text:1.0}variable-set"):
name = p.get("{urn:oasis:names:tc:opendocument:xmlns:text:1.0}name")
for k,v in replace.items():
if k == name:
p.text = v
e.write()
o.close()
la classe OOoPY fait une poignée de lignes...
--
William Dodé -
http://flibuste.net