[c++ MFC] Automation Word : objet find.

Automation Word : objet find. [c++ MFC] - C++ - Programmation

Marsh Posté le 06-10-2005 à 15:29:53    

Bonjour à tous!
 
Je dois, pour mon boulot, programmer une classe d'automation word 2003. J'ai récemment fait une classe excel (2003), sans problèmes. Mais je bloque sérieusement sur quelques points :  
 
- comment utiliser la classe find (word)? A chaque essai, je me chope une erreur de type "type incompatible" ou . Ce n'est pas faute d'avoir cherché, mais je n'ai rien trouvé.
- Comment, à l'aide des automations toujours, mais en excel, griser une case?
- Ou trouver de la doc a propos de tout cela?
 
Merci pour vos futures réponses!!!

Reply

Marsh Posté le 06-10-2005 à 15:29:53   

Reply

Marsh Posté le 06-10-2005 à 18:06:18    

je vois pas ou est le problème... dés l'instant où tu as crée ton objet Word.Application ou Excel.Application, tu as accés à toutes leurs méthodes.
pour la doc, voir la référence VBA de chaque logiciel, c'est aussi utilisable en C++


Message édité par Harkonnen le 06-10-2005 à 18:06:32
Reply

Marsh Posté le 06-10-2005 à 18:19:37    

ben si....
 
par exemple, en vba,  
 

Code :
  1. Selection.InsertBefore Chr(13)
  2. Selection.Collapse wdCollapseStart
  3. Selection.Find.ClearFormatting
  4. Selection.Find.Replacement.ClearFormatting
  5. With Selection.Find
  6. .Text = "(^013)(*)(^013)"
  7. .Replacement.Text = "1"
  8. .Forward = True
  9. .Wrap = wdFindContinue
  10. .Format = False
  11. .MatchCase = False
  12. .MatchWholeWord = False
  13. .MatchWildcards = True
  14. .MatchSoundsLike = False
  15. .MatchAllWordForms = False
  16. While .Execute(Replace:=wdReplaceOne)


 
ben pas de problèmes.... le tout est de remettre cela en cpp...
Bon, on a une classe Find. Donc, je suppose que l'on peut écrire  

Code :
  1. Find fd;
  2. fd.attachdispatch(oDoc);


 
Ensuite, c'est la méthode execute de l'objet find qui plante... impossible de faire quoi que cela soit... En fait, j'ai beau essayer em me basant sur les exemples de la MSDN, j'ai toujours les mêmes messages d'erreur : soit "type incompatible" (je suis plus au boulot, et je penses que c'est bien cela), soit "méthode inconnue". Or, même ces messages d'erreur, je n'arrive pas à les identifier correctement en VBA....
 
Même en "traduisant" mot à mot certains exemples en VBA, cela ne fonctionne pas, je dois certainement louper une étape quelque part......
 
 
ps : je viens de commencer les automations mais je suis malgré tout pressé par le temps, mon programme doit être fini pour la fin du mois....
 

Reply

Marsh Posté le 06-10-2005 à 18:30:11    

Reply

Marsh Posté le 06-10-2005 à 20:49:55    

Peut-être plus simple en tout cas car je travaille avec les MFC et je suis parti de cet exemple :
 
http://support.microsoft.com/defau [...] -us;252719
 
Simplement en créant une nouvelle classe automation avec le classwizard....  
 
J'ai déjà - comme j'ai dit - créé celle d'excel (qui marche bien au demerant, sauf que j'ai ce problème de cases à griser que je n'avais pas avec excel 97, le problème c'est que l'on est passé à office 2003 et je suis bon pour me retaper tout le boulot...).
 
Je me retrouvre donc avec ce style de code :

Code :
  1. _Application oWord ;
  2.    Documents oDocs;
  3.    _Document oDoc;
  4.    COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);  //For optional args
  5.    //Start Word
  6.    if(!(oWord.CreateDispatch("Word.Application", NULL)))
  7.    {
  8.       AfxMessageBox("Error starting Word.", MB_SETFOREGROUND);
  9.       return;
  10.    }
  11.    oDoc = oDocs.Open(COleVariant("C:\\Doc1.doc" ), vOpt, vOpt, vOpt,
  12.                vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt,
  13.                vOpt, vOpt, vOpt, vOpt);


 
j'abrège un  peu (et je n'ai pas mon code devant moi...), et j'ai à ma disposition une classe Find, qui à une fonction membre execute, ayant les mêmes paramètres que le find de VBA (forcément). Comme je le dis, c'est certainement au niveau du type de paramètres que cela foire, puisque l'appli marche (ouverture de word, ouverture d'un document et d'autres petites choses comme la sélection), mais pas le find....
 
Si j'apelle Find.SetText (vu qu'en VBA on peut apeller find.text = "...." ), il me renvoie comme erreur "membre inconnu".  
Si j'apelle Find.Execute (il y a une flopée de paramètres dont je ne rapelles plus les noms), même en mettant vOpt comme argument partout (COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);, donc pour les arguments facultatifs), il me répond "type incorrect" (je penses que c'est cela ou type incompatible).
 
Et j'ai beau retourner le problème dans tout les sens, rien à faire....
 
ps : j'avais développé de la quasi même manière une classe d'automation excel sous office97. Sauf que là, j'avais des #import pour les dlls, je n'était pas passé par les mfc pour générer les classes, et là, j'avoue bien que je bloque... pour le find! même utiliser word pour une correction automatique ou une recherche de synonymes marche sans problèmes.. allez savoir!! n'empêche que là, je suis dessus depuis deux jours et cela me br**** un sacré coup! Alors, s'il y a une âme charitable qui l'a déjà fait...


Message édité par kate_arsher le 06-10-2005 à 20:54:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed