PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Publipostage LibreOffice
Publipostage LibreOffice
Débuté par alex, 17 aoû. 2017 11:27 - 15 réponses
Posté le 17 août 2017 - 11:27
Bonjour à tous,

Mon application actuel fait du publipostage sur Word (Modèle de doc avec des champs de fusion). dans la perspective d'une migration sur libre Office j'étudie la possibilité de réaliser la même chose. Les exemple trouvez n'étant pas clair pour moi, j'ai essayé la méthode suivante.
- J'ai supprimer les champs de fusion pour les remplacer par du texte type "VAR_xxx"
- Enregistrer mon document ".doc" en ".xml"
- Traitement de remplacement des valeurs avec la fonction "remplace"
Voici mon code de test:
SourceXML est une chaîne = fChargeTexte("C:\Users\xxx\Desktop\doc_test.xml")
Résultat1 est une chaîne
i est un entier = 1
bRes est un booléen

//Création du doc XML
bRes = XMLDocument("test.xml",SourceXML)

newXML est une chaîne = Remplace(SourceXML,"VAR_xxx","toto")
newXML = XMLConstruitChaîne("test.xml")
fSauveTexte("C:\Users\xxx\Desktop\test.xml",newXML)


Ma chaine newXML contient bien la valeur "toto" a la place de "VAR_xxx" mais ca n'est pas pris en compte lors de l'enregistrement !
Avez vous une idée de ce qui cloche ?

merci d'avance
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 17 août 2017 - 11:40
hello,

alex a écrit :
> - Les exemples trouvez n'étant pas clair pour moi, j'ai essayé la méthode suivante.

l'exemple suivant n'est pas suffisamment clair ?
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/172997-publipostage-sous-open-office-173014/read.awp

--
Ami calmant, J.P
Posté le 17 août 2017 - 11:42
PS: Le terme publipostage ets mal choisi car je ne souhaite pas envoyer mon document par mail, juste créer un .odt
Posté le 17 août 2017 - 11:49
Merci Jurassic Pork
j'avais déja vu cela effectivement.
Comme je ne comprend pas tout au niveau des différents paramêtres ca me semblait compliquer a maintenir (sans avoir essayé j'avoue) c'est pour ça que j'ai essayé une solution "plus simple" bien qu'elle ne soit surement pas terrible au yeux d'un spécialiste :(.
Je vais quand même tester cela,
et merci pour ta reactivité !! :)
Posté le 17 août 2017 - 13:55
Sur ton modèle à quoi correspond le "Clients" ? "MesClient" etant le fichier ? et "Civilité" la colonne ?
De plus tu as bien ajouté les champs en passant par "insertion -> Champs -> champs de mailing ? car sur ton exemple il n'ya pas les chevrons
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 17 août 2017 - 23:12
hello,
En fait je pars d'une table windev que je transforme en fichier csv qui est transformé lui même en base de données LibreOffice (.odb) :





C'est cette base de données qui sert alors de source de données pour le modèle writer et Clients représente le nom de cette source de données.
j'utilise bien insertion -> Champs -> champs de mailing






Il y a une version plus à jour de mon code chez developpez.net ici :
https://www.developpez.net/forums/d1634423/environnements-developpement/windev/remplacer-publipostage-word-vers-libreoffice/…

Si tu veux revenir à des choses plus simples dans le fil de discussion ci-dessus il y a Romulus qui parle de la technique du xml.
Dans ton code je ne comprends pas pourquoi tu passes par un XMLDocument alors que tu ne veux faire qu'une substitution de chaîne.
Un code comme ceci pourrait fonctionner :
SourceXML est une chaîne = fChargeTexte("C:\Users\xxx\Desktop\doc_test.xml")
DestXML est une chaîne = Remplace(SourceXML,"VAR_xxx","toto")
fSauveTexte("C:\Users\xxx\Desktop\test.xml",DestXML)



--
Ami calmant, J.P
Message modifié, 17 août 2017 - 23:30
Posté le 18 août 2017 - 11:50
Bonjour Jurassic,
encore merci.
Effectivement ca marche avec cette solution simple. J'utilisais XMLDocument car j'avais vu des exemple ou c'était utilisé ....
Cette solution est elle fiable ?
Ca me parait très simple par rapport a ton exemple !
Je vais tout de même tester ta solution.
Par contre je vais partir d'un fichier xml directement pour créer la bdd.
Posté le 18 août 2017 - 16:28
Bon j'ai vraiment des difficultés a comprendre ...(pb de niveau !!)

un coup ca plante la
oDocBase>>storeAsURL(OOFichier(MonRepSource + "test.odb"),arg_DbArgs)

et quand sans savoir pourquoi ca n'a pas planté, ca plante la
oPublipostage>>Execute(arg_MyProps)


Qu'est ce qune valeure nommée ?
Posté le 18 août 2017 - 16:46
alex a écrit :
Bon j'ai vraiment des difficultés a comprendre ...(pb de niveau !!)

un coup ca plante la
oDocBase>>storeAsURL(OOFichier(MonRepSource + "test.odb"),arg_DbArgs)

et quand sans savoir pourquoi ca n'a pas planté, ca plante la
oPublipostage>>Execute(arg_MyProps)


Qu'est ce qune valeure nommée ?



Bon ca plante au deuxième point lors d'une première execution. C'est a dire losque aucun processus LIbreOFFice ne tourne.
Cependant le tableau arg_MyProps est vide ...
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 18 août 2017 - 22:45
hello,
une valeur nommée c'est un objet LibreOffice avec comme propriétés un nom avec une valeur.
Quelle version de LibreOffice utilises-tu ? 32 ou 64 bits ? O.S ?
Par contre je vais partir d'un fichier xml directement pour créer la bdd.

Qu'entends-tu par la ?
Si tu as changé ton code par rapport au mien quel est-il ?

--
Ami calmant, J.P
Posté le 20 août 2017 - 20:35
Bonjour,
LibreOffice 64 bits de mémoire (je verifierais demain) OS Windows 10.
Je n'ai rien modifié a par le nom des fichiers.

Je sais pas trop comment expliquer, pour insérer les champs de fusion dans libreOffice je suis partis d'un fichier XML pour créer la table.
Que doit il y avoir dans le tableau arg_myProps ?

Encore merci de ton aide en tout cas
Posté le 21 août 2017 - 08:52
Bonjour,
finalement c'est une version 32 bits qui est installé.
J'ai oublié le numéro de version sur mon précédent message: 5.2
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 21 août 2017 - 18:02
hello
alex a écrit :
> Que doit il y avoir dans le tableau arg_myProps ?

rien , il n'est défini que dans :
arg_MyProps est un tableau de 0 objet automation dynamique //Variant //Tableau des Propriétés de MailMerge pour la fusion


--
Ami calmant, J.P
Posté le 21 août 2017 - 19:43
d'accord, donc ca devrait marcher ...
je reverrai ca demain
Posté le 22 août 2017 - 11:53
Bonjour,
bon et bien j'ai toujours le même problème. Ma source odb est bien générée avec les données, mon document document est généré aussi mais sans les données.

De temps en temps j'ai aussi "wdtst.exe" a cessé de fonctionner.
Posté le 23 août 2017 - 09:37
Bonjour,
voici l'erreur que j'ai

Module : KERNEL32.DLL
Adresse de base : 770F0000
Erreur systeme : Access violation (GPF)
EIP = 771103BB
OS : Windows 8 (6.2.9200) <= En réalité Windows 10

JE vais recréer un sujet sur le forum old car je ne suis pas en version 22...