PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Publipostage LibreOffice
Publipostage LibreOffice
Started by alex, Aug., 17 2017 11:27 AM - 15 replies
Posted on August, 17 2017 - 11:27 AM
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
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on August, 17 2017 - 11:40 AM
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
Posted on August, 17 2017 - 11:42 AM
PS: Le terme publipostage ets mal choisi car je ne souhaite pas envoyer mon document par mail, juste créer un .odt
Posted on August, 17 2017 - 11:49 AM
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é !! :)
Posted on August, 17 2017 - 1:55 PM
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
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on August, 17 2017 - 11:12 PM
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 modified, August, 17 2017 - 11:30 PM
Posted on August, 18 2017 - 11:50 AM
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.
Posted on August, 18 2017 - 4:28 PM
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 ?
Posted on August, 18 2017 - 4:46 PM
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 ...
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on August, 18 2017 - 10:45 PM
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
Posted on August, 20 2017 - 8:35 PM
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
Posted on August, 21 2017 - 8:52 AM
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
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on August, 21 2017 - 6:02 PM
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
Posted on August, 21 2017 - 7:43 PM
d'accord, donc ca devrait marcher ...
je reverrai ca demain
Posted on August, 22 2017 - 11:53 AM
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.
Posted on August, 23 2017 - 9:37 AM
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...