IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[VSTO2005]Word problème avec Normal.dot


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut [COM]Automatisation Word problème avec Normal.dot
    Bonjour,

    Voila je créer des fichiers word puis je les lance depuis mon winform.

    Problème quelquefois quand je veux fermer manuellement (croix rouge) mon Word il me fait une erreur a cause du normal.dot qu'il veux écraser ou j'en sais rien trop quoi..

    J'ai remarqué que le problème se produisait plus souvent quand j'ai refermé mon winform et que le word reste ouvert et après quand j'essaye de le fermer il fait l'erreur.

    Je pense que je doit lacher le processus Winword mais je sais pas trop comment faire?

    Voici mon code:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Word.Application newApp = new Word.Application();
                object o = System.Reflection.Missing.Value;
                object Source = Recup; //chemin du fichier word en string
                 newApp.Visible = true;
                 //démarrage de word
                newApp.Documents.Open(ref Source, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o);

    Merci

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Pourquoi ne pas faire un simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Diagnostics.Process.Start("winword.exe", "fichier.doc");
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    ben parce que je ne fait pas que ca. Je rajoute des fois des toolbars (pas dans ce cas la) et je commande des impressions puis des sauvegardes.

    Ce qui est impossible ou presque avec System.Process et les objets standard du Framework.

    De plus je dois être sur de la version du Word car des utilisateurs (je sais c'est ...) ont deux word (XP et 2003) installé sur leur PC.

    Merci

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Ton doc Word doit-il rester ouvert quand tu quittes ton appli ou peut-on le fermer ?
    Si c'est le cas ne peux-tu pas appeler la méthode close (si ça existe) sur ton objet Word quand ton appli se ferme ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Bonjour et Merci pour tes réponse.

    (mon collègue totoen qui a cette tache est malade donc je reprends son problème vu que c'est important)

    Mais ce que j'aimerais faire c'est vraiment ouvrir le word via le VSTO et lui laissez vivre sa propre vie indépendamment (voler de ses propres ailes) de tout le reste de mon winform.

    si je ferme mon application je ne doit pas fermer le word s'il est encore ouvert et ca se pourrait aussi que le doc word soit déjà fermé quand je quitte mon appli.

    J'espère être clair et surtout que ca soit possible.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Non, si tu veux que les processus soit indépendants, il faut les lancer avec Process.Start.
    Si tu veux utiliser VSTO, tu dois fermer le document avec (voire même avant) le winforms.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  7. #7
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ouais c'étais bien a la conclusion que j'étais arrivé. Mais je voulais être sure que je ne puisse pas le faire via le VSTO.

    Merci de ma part et de celle de totoen.

    ++

    Thierry

    P.s. je demanderais a totoen de mettre résolu quand il sera guéri.
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Bonjour et merci pour votre aide,

    La solution retenu est :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     ProcessStartInfo processInfo = new ProcessStartInfo("winword.exe", @"c:\toto.doc");
                processInfo.WindowStyle = ProcessWindowStyle.Hidden;
                Process arjProcess = new Process();
                arjProcess.StartInfo = processInfo;
                arjProcess.Start();
                arjProcess.Close();

    Es-ce que c'est bien à ca que vous pensiez?

  9. #9
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Je n'ai encore jamais utilisé VSTO à proprement parler, mais il est tout à fait possible avec l'automation de laisser Word ouvert. Il suffit juste de ne pas fermer le document ni l'application Word.

    Le message que tu as à propos de l'enregistrement du normal.dot n'est pas choquant et n'est pas issu de l'automation, mais de Word. Il suffit de répondre non à la question pour pouvoir fermer le document correctement.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    oui et non il ne suffit pas que de cliquer sur non car word reste ouvert et il faut encore une fois cliqué sur la croix et il y a de nouveau un autre message. Et la enfin ca se ferme.

    Donc tu prétends que je dois pouvoir faire ce que je veux avec le VSTO? Mais tu n'as aucune piste à me donner et en plus t'es pas sure de ce que tu avances car tu ne l'a jamais utilisé?

    Citation Envoyé par Skalp
    Il suffit juste de ne pas fermer le document ni l'application Word.
    Citation Envoyé par totoen
    J'ai remarqué que le problème se produisait plus souvent quand j'ai refermé mon winform et que le word reste ouvert et après quand j'essaye de le fermer il fait l'erreur.
    D'ailleurs avec le code en dessous on voit que je ne le ferme pas. Donc qu'es-ce que tu entends par la?

    Merci

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Un petit mot au passage: même si faire un développement VSTO, c'est faire de l'automation COM, cela reste plus ou moins différent à certains moment.

    Dans le cas précis, il me semble bien que tu fais de l'automation COM sur Office (Ajout des références, etc...) et non pas du VSTO (utilisation des templates de projets, etc.....)


    My 2 cents

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Citation Envoyé par Thomas Lebrun Voir le message
    Un petit mot au passage: même si faire un développement VSTO, c'est faire de l'automation COM, cela reste plus ou moins différent à certains moment.

    Dans le cas précis, il me semble bien que tu fais de l'automation COM sur Office (Ajout des références, etc...) et non pas du VSTO (utilisation des templates de projets, etc.....)


    My 2 cents
    Oui c'est vrai ce que tu dis, je fais de l'automatisation COM sur Word.

    Désolé je vais modifier mon titre.

    Mais alors qu'en est-il pour mon problème je dois faire comment utiliser system.process ou y a un moyen de lacher le process via l'automatisation COM de Word?

    Merci de m'avoir corrigé

  13. #13
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par totoen Voir le message
    oui et non il ne suffit pas que de cliquer sur non car word reste ouvert et il faut encore une fois cliqué sur la croix et il y a de nouveau un autre message. Et la enfin ca se ferme.
    Quel est ce nouveau message ? Si tu ne nous en dis pas plus, on ne pourra pas t'aider.

    Citation Envoyé par totoen Voir le message
    Donc tu prétends que je dois pouvoir faire ce que je veux avec le VSTO? Mais tu n'as aucune piste à me donner et en plus t'es pas sure de ce que tu avances car tu ne l'a jamais utilisé?
    Je ne prétends rien avec les VSTO, je connais très peu. J'ai juste remarqué que cela ressemblait plus à de l'automation qu'aux VSTO. Ce que tu confirmes, d'ailleurs
    Et l'automation Word, je connais déjà plus. Donc je peux peut-être t'aider !

    Si tu as le message avec le normal.dot, c'est que le modèle de document est modifié. Cela peut provenir de ton automation, mais aussi de l'utilisateur puisque tu lui laisses la main, donc tu ne pourras pas systématiquement éviter ce message.

    Pour moi, il n'y a pas de problème, à part peut-être ce deuxième message dont tu me parles.
    J'attends donc que tu nous donne plus de détails sur ce deuxième message.

    Pour info, tu as la possibilité de supprimer les messages d'avertissement avec l'automation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newApp.DisplayAlerts = false;
    Mais cela risque de faire plus de mal que de bien car les utilisateurs ne seront pas avertis en cas de modifications non sauvegardées.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Ok ben je t'es fais des Print Screen des messages.

    Voici le déroulement:

    Je clique sur la croix donc premier message :
    1.jpg

    je clique non:
    2.jpg

    je clique annuler:
    word ferme mon doc mais pas l'application Word (word ouvert sans document)

    je reclique sur la croix:
    3.jpg

    je clique sur non

    et la enfin Word se ferme.

    Merci pour ton Idée je vais essayer merci. l'utilisateur est seul responsable de ces documents et la plupart du temps il ne sont pas sauvegardé alors m'en fou s'il ne pose pas la question.
    Images attachées Images attachées    

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Ben enfaite ca ne change rien de mettre:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    newApp.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;

  16. #16
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Aaah, c'est un peu différent de ce que je pensais. Comme quoi les messages d'erreurs sont importants pour comprendre.

    Lorsque tu as le premier message (1.jpg), est-ce qu'il y a plusieurs applications (ou documents) word ouverts ou un seul à ce moment ?

    S'il n'y en a qu'un, c'est qu'il doit y avoir d'autres processus winword encore ouverts, tu peux les retrouver dans le gestionnaire des tâches. Dans ce cas, cela provient probablement du fait que tu stoppes le débugage avec VS pendant l'automation. Est-ce le cas ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Oui c'est vrai j'ai plusieurs winword.exe ouvert tu as raison.

    Mais par contre ce n'est pas en debug mais bien en exploitation que j'ai le problème.

    Si j'ouvre 3 word via cette même commande et que je ferme mon Winform quand je ferme le premier word pas d'erreur et les deux suivants oui.

    Mais bon la j'ai fait quelques test avec system.process ca a l'air de marché et comme ca je ne serais plus obligé d'avoir le dll de word dans tout mes winforms (ce qui rendra l'application plus légères).

    Donc merci pour ton aide mais je crois que je faire avec system.Process à moins que tu y vois une objection?

    Merci

  18. #18
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Non, effectivement, System.Process est tout à fait convenable pour ouvrir un document (Word ou pas, d'ailleurs).

    Mais du coup, lorsque tu génères les fichiers par automation, tu n'as pas besoin d'afficher Word à l'utilisateur : newApp.Visible = true;.

    Il te suffit de :
    - générer le doc en automation invisible (newApp.Visible = false;)
    - libérer les ressources (cela te permettrait de ne pas avoir des process winword qui trainent et que tu n'utilises plus. voir plus bas)
    - ouvrir le doc avec System.Process.


    Pour libérer les ressources avec l'automation Office, c'est un peu délicat, car bien souvent les process office ne se ferment pas correctement. Pour de plus amples explications, je te renvoie à ce sujet de développez : Automatisation Excel : Fermer le processus Excel récalcitrant


    N'oublie pas le tag lorsque tu auras terminé

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse.

    Bon pour que tu aies bien compris mon scénario, je ne génére pas vraiment le word via l'automatisation j'utilise WordML (déclaration xml d'un document Word 2003).

    Donc moi je part d'un XML et je fais une simple transformation XSLT puis j'ouvre le document résultant.

    Et après suivant les documents je l'imprime et le referme ou je l'ouvre simplement comme dans ce cas la.

    Donc quand je l'ouvre : System.process

    et quand je veux imprimer: COM Word.


    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA - Excel - Word] Problème avec Range(Cells(1,1),Cells(10,10))
    Par Tanoffy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/10/2014, 11h07
  2. [WD-2003] Problème avec Normal.dot
    Par Godzestla dans le forum Word
    Réponses: 19
    Dernier message: 19/01/2011, 16h18
  3. MS Word problème avec le convertisseur mswrd632
    Par Jasmine80 dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2010, 15h04
  4. [VBA WORD] Probleme avec un .dot
    Par jagdjg dans le forum VBA Word
    Réponses: 6
    Dernier message: 18/01/2006, 11h07
  5. [VBA] [WORD] problèmes avec NUMPAGES
    Par meufeu dans le forum VBA Word
    Réponses: 9
    Dernier message: 08/08/2005, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo