Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut les p'tit clous...
Je travaille sous pb5.0, et j'utilise un objet ole pour ouvrir un doc de fusion.... Tout fonctionne correctement, seulement on me demande de migrer de word 97 à word 2003 et là tout fou le camp...
Je plaisante, en fait mon problème subsiste à la fermeture du document word, apparemment coté pb on attend un retour de word de la forme:
// Retour d'information à partir de Word IF message.number = WM_DOC_SAVED THEN ole_word.clear() CloseWithReturn( Parent, lparam ) END IF
Avec
// WM_USER message CONSTANT LONG WM_DOC_SAVED = 2008
Or mon message.number me ramène 7.... Je suppose que ce code attend que l'on est sauvegardé le doc word avant de rendre la main à pb... Et là comme ça me ramène 7, pb freeze...
Ma question est : est-ce que cette valeur de 2008 vous parle?
Ah oui et j'ai aussi ça...
// Classe de Word 8.0 String ls_WordClassName = "OpusApp"
Apparemment, c'est une façon de nommer la classe d'application word, est-ce que quelqu'un aurait du détail sur le sujet...
Bye
Pascal
Dernière modification par Pilou007 (08-04-2010 07:23:53)
Hors ligne
Salut
Comme on dit, pas de nouvelle, ...... Pas de nouvelle....
Non, il n'y a personne qui connaisse cela?
merci pour votre aide
Bye
Pascal
Hors ligne
Pour ma part, j'ai fait ce script permettant de faire une fusion Word à partir de PB :
IF len(ls_resultatfusion) > 0 THEN IF fileexists(ls_resultatfusion) = TRUE THEN lb_test = FileDelete(ls_resultatfusion) IF lb_test = FALSE THEN Messagebox("Attention", "Le fichier est déjà ouvert~nVeuillez le fermer avant de recommencer") RETURN END IF END IF END IF ll_word = OpenChannel ("Winword", "SYSTEM", Handle(THIS)) DocWord = CREATE OLEObject ModeleWord = CREATE OLEObject ResultatWord = CREATE OLEObject IF ll_word < 0 THEN //Word n'est pas lancé donc on ouvre une nouvelle session li_resultat = DocWord.ConnectToNewObject("Word.Application.8") ELSE //Word est lancé, on ferme la connexion CloseChannel(ll_word,Handle(THIS)) li_resultat = DocWord.ConnectToObject("", "Word.Application.8") END IF IF li_resultat = 0 THEN DocWord.Application.Visible = TRUE //Ouverture du modèle DocWord.Application.Documents.open(ls_modele) DocWord.Application.Activate() ModeleWord = DocWord.Application.ActiveDocument //Commande d'ouverture de la source de données DocWord.ActiveDocument.Mailmerge.OpenDataSource(ls_fichierdonnees , 0, FALSE, FALSE, TRUE, FALSE," ","",FALSE, "", "", "Entire Spreadcheet") DocWord.ActiveDocument.Mailmerge.Destination = 0 //fusionner dans le fichier DocWord.ActiveDocument.Mailmerge.SuppressBlankLines = TRUE //Fusionner DocWord.ActiveDocument.Mailmerge.Execute(TRUE) ResultatWord = DocWord.ActiveDocument ResultatWord.SaveAs(ls_resultatfusion) // ResultatWord.PrintOut() ModeleWord.close(0) DocWord.DisconnectObject() //Destruction des objects DESTROY ModeleWord DESTROY DocWord DESTROY ResultatWord END IF
Hors ligne
Salut
Merci Julien pour ton code...
En fait je pense avoir trouvé...
La constante 2008 correspond à une constante dans une macro qui fait des choses bizarre... Je n'y connais pas grand chose en macro word et j'ai pas trop envie de m'investir la dedans....
Pour le nom de word "opusapp", c'est le nom donné à word par microsoft, je ne sais pas trop d'où ça sort, mais bon, ça ne me gène en rien...
Bon j'ai finalement réussi à me débrouiller... Je clos le sujet...
Merci
Bye
Pascal
Hors ligne