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 :

Gestion des évènements sur documents WORD


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Ci dessous un petit programme en C# qui ouvre un document WORD pour gérer du publipostage.

    Vous y remarquerez la gestion de l'evenement on close. Problème, il ne passe jamais dedans.

    Auriez vous une piste ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using Microsoft.Office.Interop.Word;
     
    namespace ConsoleApplication2
    {
        class Program
        {
            private void openWithDataSource()
            {
                Object oFalse = false;
                Object oTrue = false;
                Object missing = System.Reflection.Missing.Value;
     
                Application msWord = new Application();
                msWord.Visible = true;
     
     
                Document nvDoc = msWord.Documents.Add(ref missing, ref missing, ref missing, ref missing);
     
     
                object fileName = @"C:\document.doc";
                string dbName = @"C:\document.txt";
     
                MailMerge mailMerge = nvDoc.MailMerge;
                mailMerge.OpenDataSource(dbName, ref missing, ref missing, ref oTrue,
                    ref oFalse, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing);
     
              msWord.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(beforeClose);
            }
     
     
            static void Main(string[] args)
            {
                Program program = new Program();
                program.openWithDataSource();
            }
     
            private void beforeClose(Document doc, ref bool Cancel)
            {
                Debug.WriteLine("on passe ici");
            }
        }
    }
    EDIT
    Pour information, si j'incorpore le même code dans une application windows form et que je mets donc ce code suite à un clic sur un bouton, il passe bien dans le on close.

    Comment faire en sorte que dans mon programme (console sans IHM), le thread tourne encore et attende bien la fermeture de mon programme ?

    Merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Points : 36
    Points
    36
    Par défaut
    J'ai fais un système en mousse mais qui marche ... qu'en pensez vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Object oFalse = false;
                Object oTrue = false;
                Object missing = System.Reflection.Missing.Value;
     
                Application msWord = new Application();
                msWord.Visible = true; // Mettez cette variable à true si vous souhaitez visualiser les opérations.
     
                // Créer le document
                Document nvDoc = msWord.Documents.Add(ref missing, ref missing, ref missing, ref missing);
     
                // Attribuer le nom
                object fileName = @"C:\document.doc";
                string dbName = @"C:\document.txt";
     
                // Sauver le document
                /*nvDoc = msWord.Documents.Open(ref fileName, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing);*/
     
                MailMerge mailMerge = nvDoc.MailMerge;
                mailMerge.OpenDataSource(dbName, ref missing, ref missing, ref oTrue,
                    ref oFalse, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing);
     
                //msWord.Quit(ref missing, ref missing, ref missing);
                //msWord.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(beforeClose);
     
                while (IsDocumentStillOpen(nvDoc, msWord))
                {    
                    Thread.Sleep(500);
                }
     
                Console.WriteLine("ferme");
    Méthode IsDocumentStillOpen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private static bool IsDocumentStillOpen(
                           Document doc, Microsoft.Office.Interop.Word.Application wordApp)
            {
                try
                {
                    foreach (Document openDoc in wordApp.Documents)
                    {
                        if (openDoc.Equals(doc))
                        {
                            return true;
                        }
                    }
                }
                catch (System.Exception)
                {
                    return false;
                }
     
                return false;
            }
    N'y a t'il pas mieux ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Points : 36
    Points
    36
    Par défaut
    N'ayant pas de retour, je clos le thread.

  4. #4
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Citation Envoyé par kilicool Voir le message
    Bonjour,

    Ci dessous un petit programme en C# qui ouvre un document WORD pour gérer du publipostage.

    Vous y remarquerez la gestion de l'evenement on close. Problème, il ne passe jamais dedans.

    Auriez vous une piste ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using Microsoft.Office.Interop.Word;
     
    namespace ConsoleApplication2
    {
        class Program
        {
            private void openWithDataSource()
            {
                Object oFalse = false;
                Object oTrue = false;
                Object missing = System.Reflection.Missing.Value;
     
                Application msWord = new Application();
                msWord.Visible = true;
     
     
                Document nvDoc = msWord.Documents.Add(ref missing, ref missing, ref missing, ref missing);
     
     
                object fileName = @"C:\document.doc";
                string dbName = @"C:\document.txt";
     
                MailMerge mailMerge = nvDoc.MailMerge;
                mailMerge.OpenDataSource(dbName, ref missing, ref missing, ref oTrue,
                    ref oFalse, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing);
     
              msWord.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(beforeClose);
            }
     
     
            static void Main(string[] args)
            {
                Program program = new Program();
                program.openWithDataSource();
            }
     
            private void beforeClose(Document doc, ref bool Cancel)
            {
                Debug.WriteLine("on passe ici");
            }
        }
    }
    EDIT
    Pour information, si j'incorpore le même code dans une application windows form et que je mets donc ce code suite à un clic sur un bouton, il passe bien dans le on close.

    Comment faire en sorte que dans mon programme (console sans IHM), le thread tourne encore et attende bien la fermeture de mon programme ?

    Merci

    Chez moi ça marche (enfin j'ai commenter la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     mailMerge.OpenDataSource(dbName, ref missing, ref missing, ref oTrue,
                    ref oFalse, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing);
    parce que j'arrivais pas à la faire fonctionner)

    mais c'est juste que tu as mit un Debug.WriteLine au lieu d'un Console.WriteLine ou tu n'as pas initialisé le débugger.


    Essaye de travailler cette solution parceque ta solution avec le test tout les 500 ms c'est vraiment pas propre

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

Discussions similaires

  1. "Document.body.filters" dans la gestion des PNG sur IE6
    Par neilaur dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/09/2011, 10h35
  2. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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