PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Récupérer le texte d'un champ précis en OLE Automation sur un fichier Word
Récupérer le texte d'un champ précis en OLE Automation sur un fichier Word
Iniciado por Aurelien Estival, 04,mar. 2020 15:23 - 3 respuestas
Miembro registrado
4 mensajes
Publicado el 04,marzo 2020 - 15:23
Bonjour à tous,
Tout d'abord merci à ceux qui prendront le temps de me lire.
Mon problème est le suivant, avec ce bout de code:
sFilepath est une chaîne = snomFichier
sTemp est une chaîne
// Allocation de l'objet
Word>>documents>>Add(sFilepath)
Word>>Visible=Faux
//On Compte le nombre de champs total dans le document ouvert
nbShape est un entier = Word>>ActiveDocument>>Shapes>>Count()
sTexteChamp est une chaîne
//On parcours chaque champs et, pour celui voulu on récupère son contenu
POUR i = 1 À nbShape
sTemp = Word>>ActiveDocument>>Shapes[i]>>name()
SI sTemp = "Rectangle 3"
sTexteChamp = Word>>ActiveDocument>>Shapes[i]>>Select
Trace(sTexteChamp)
FIN
FIN

j'arrive pour l'instant à atteindre le champ désiré seulement lors de mon Trace(sTexteChamp) le seul affichage que j'obtiens est un "0".
J'ai bien essayer de mettre : sTexteChamp = Word>>ActiveDocument>>Shapes[i]>>Select>>Text() et meme remplacer le Text() par WholeStory seulement il me renvoie une erreur me disant que l'objet sur lequel j'appelle la méthode n'est pas un obet OLE Automation?
J'en suis donc bloqué ici, je me positionne bien sur mon champ mais impossible de récupérer son contenu... :(
Si quelqu'un a une idée,
Tout aide ou piste sera la bienvenue ;)
Merci encore et bon dev à tous!
Miembro registrado
962 mensajes
Publicado el 05,marzo 2020 - 16:49
hello,
tu peux essayer quelque chose comme :
LeTexte est chaîne
tAutomateObject est un objet OLE dynamique

//Ici démarre l'utilisation de Word
QUAND EXCEPTIONEXCEPTION DANS
tAutomateObject = allouer un objet OLE "Word.Application"
tAutomateObject>>Visible = OLETrue
tAutomateObject>>Documents>>Open("M:\test\mediainfo.docx", OLETrue)
LeTexte = tAutomateObject>>ActiveDocument>>Shapes("ZoneDeTexte")>>TextFrame>>TextRange>>Text
Trace (LeTexte)
tAutomateObject>>ActiveDocument>>Close(OLEFaux, OLEFaux, OLEFaux)
tAutomateObject>>Quit()
FAIRE
Info(ExceptionInfo(errComplet))
FIN

Libérer tAutomateObject


--
Ami calmant, J.P
Miembro registrado
4 mensajes
Publicado el 06,marzo 2020 - 10:30
Bonjour et merci à toi pour ta réponse, j'ai oublié de vérifier le forum hier soir avant de partir.
J'ai entre temps décider de créer moi même un état windev dans lequel je chargerai les infos dont j'ai besoin pour ne pas perdre plus de temps.
Cependant cette méthode de récupération des données m'intéresse et je vais tout de même prendre le temps de tester ce bout de code que tu m'as passé et reviendrai ensuite poster une réponse ici pour te dire si cela a fonctionné ou non tout de même.
Merci encore et bon dev ;)
Estival Aurélien
Miembro registrado
4 mensajes
Publicado el 06,marzo 2020 - 10:50
Re,
je te confirme que ton code fonctionne parfaitement, merci à toi JP! :D
Seulement je viens de me rendre compte que dans mon cas à moi cela ne marchera toujours pas, en effet le document sur lequel je travail est en fait généré dynamiquement par un prestataire externe et va savoir comment ils ont fait, mais le champ que j'essaie d'atteindre n'est pas considéré comme une zone de texte.
Pour tout dire il n'est même pas visible dans la liste des champs du document word???
Je vais donc mettre de côté ce document et resté sur mon état pour l'instant pour ne pas perdre plus de temps la dessus.
Je te remercie encore pour ton code qui aurait du fonctionner si mon document word était correctement structuré,
Je te souhaite de passer une bonne journée et un bon Dev,
Estival Aurélien.