PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Publipostage LibreOffice
Publipostage LibreOffice
Iniciado por alex, ago., 17 2017 11:27 AM - 15 respostas
Publicado em agosto, 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
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em agosto, 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
Publicado em agosto, 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
Publicado em agosto, 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é !! :)
Publicado em agosto, 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
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em agosto, 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
Mensagem modificada, agosto, 17 2017 - 11:30 PM
Publicado em agosto, 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.
Publicado em agosto, 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 ?
Publicado em agosto, 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 ...
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em agosto, 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
Publicado em agosto, 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
Publicado em agosto, 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
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em agosto, 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
Publicado em agosto, 21 2017 - 7:43 PM
d'accord, donc ca devrait marcher ...
je reverrai ca demain
Publicado em agosto, 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.
Publicado em agosto, 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...