Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Je voulais mettre en place une fusion de modèle Word avec les data dans un TXT...
Lorsque je génère un fichier... pas de souci mais lorsque je dois générer plusieurs docs à la suite... pafff j'ai une erreur R0032 au niveau du .open du programme suivant :
Long llWord Integer liResultat OLEObject DocWord //Lien à Word OLEObject ModeleWord //DocumentWord à fusionner OLEObject ResultatWord //Résultat de la fusion // Tentative de connexion à word llWord = OpenChannel ("Winword","SYSTEM",Handle(THIS)) // Création des objets DocWord = CREATE OLEObject ModeleWord = CREATE OLEObject ResultatWord = CREATE OLEObject IF llWord < 0 THEN // Word n'est pas lancé donc on ouvre une nouvelle session liResultat = DocWord.ConnectToNewObject("Word.Application") ELSE // Word est lancé, on ferme la connexion CloseChannel(llWord,Handle(THIS)) liResultat = DocWord.ConnectToObject("","Word.Application") END IF IF liResultat = 0 THEN DocWord.Application.Visible = TRUE //Ouverture du modèle DocWord.Application.Documents.open(asModele) //ERREUR ICI DocWord.Application.Activate() ModeleWord = DocWord.Application.ActiveDocument // Commande d’ouverture de la source de données DocWord.ActiveDocument.Mailmerge.OpenDataSource (asFichierDonnees,0,FALSE,FALSE, TRUE,FALSE, '','',FALSE,"", "", "Entire Spreadsheet") DocWord.ActiveDocument.MailMerge.Destination = 0 //Fusionner dans fichier DocWord.ActiveDocument.MailMerge.MailAsAttachment = FALSE DocWord.ActiveDocument.MailMerge.MailAddressFieldName = "" DocWord.ActiveDocument.MailMerge.MailSubject = "" DocWord.ActiveDocument.MailMerge.SuppressBlankLines = TRUE DocWord.Activedocument.MailMerge.DataSource.FirstRecord = 1 DocWord.ActiveDocument.MailMerge.DataSource.LastRecord = -16 // Fusionner DocWord.ActiveDocument.MailMerge.Execute(TRUE) //Stocker le résultat ResultatWord = DocWord.ActiveDocument Modeleword.Close(0) DocWord.Application.Activate() DocWord.DisconnectObject() END IF // Destruction des objets Destroy ModeleWord Destroy DocWord Destroy ResultatWord
Ce morceau de programme a été entièrement adapté d'un .doc que j'ai trouvé : http://pbadonf.fr/sam1/FusionWord.doc
;)
Si vous avez une idée du pourquoi cela plante à la seconde occurrence de document à fusionner, n'hésitez pas ;)
Hors ligne
Salut
Alors... asModele est le chemin vers le modèle de document .dot
Et asFichierDonnees est le chemin vers le fichier de données à inclure lors de la fusion (un .txt avec des données séparées par un ;)
Hors ligne
Alors... le programme génère différents fichiers txt en fonction des documents à générer.
Par exemple... je sélectionne une personne pour laquelle je veux éditer 2 documents (doc de formation : convocation et convention)... L'appli va générer un .txt pour le doc de la convocation et un autre .txt pour le doc de la convention.
La génération de la convocation se passe normalement avec remplacement des signets Word... Le modèle de la convention s'ouvre et paf... plantage (sur le open) sans remplacement des signets !
J'espère que c'est pas trop trop fouillis ^^
Hors ligne
euh... truc bizarre là, je vois mes messages apparaître en double, j'en supprime un et du coup les deux disparaissent ??
Sinon pour ton problème Word je te conseillerai de tester chaque document un par un pour valider que c'est pas un des types de merge qui a un problème. et/ou genre tester les 2 mais dans l'ordre inverse, pour voir si c'est toujours le 2eme merge qui plante ou toujours le merge "convention" par exemple.
Hors ligne
Je viens de faire le test... et je viens de comprendre le problème !
Seul l'enchaînement des 2 doc pose problème... J'ai éditer les autres docs sans problème.
Je suis passé sur l'édition du pack "convoc+convention"... La convoc se charge et si... je ne touche à rien (pas de clic sur l'interface ou autre) le second doc se charge également.
Il ne doit pas aimer une pseudo interruption du traitement (il y a une latence de 10/20 secondes entre les 2 générations o_O).
Bref... ce doit être purement lié à un souci d'optimisation du code et/ou lenteur de requête et/ou lenteur d'accès au document
Dernière modification par jordel (24-07-2013 09:14:02)
Hors ligne
jordel a écrit:
Bref... ce doit être purement lié à un souci d'optimisation du code et/ou lenteur de requête et/ou lenteur d'accès au document
Mouais... Comment dire ?
Disons simplement que cette explication ne semble pas trop cartésienne. Ça me rappelle un cas inverse ou un dev a dit à propos d'un comportement "bizarre" (selon lui) de son code "ça doit être mon ordi qui est trop rapide, je vais voir si je peux le ralentir", alors que c'était juste le code qui était bancale.
Pour mémoire, R0032 c'est "Name not found calling external object <object>. OLE error, dynamic function calls fails because the function does not exist".
Et la propriété disparaitrait uniquement si on fait traîner le traitement ? Il n'y aurait pas un traitement lors d'un GetFocus ou autres qui ferait disparaitre / réinitialiser la connexion OLE ou un truc du genre ?
Hors ligne
Oui je suis d'accord pour dire que c'est fumeux... mais je ne vois pas d'explication rationnelle !!!
Il doit s'agir d'un marabout qui me joue des tours ! ^^
Hors ligne
Hors ligne
Ahah... j'ai pensé au même personnage "mondialement connu dans le quartier" en écrivant ma réponse ^^
Hors ligne