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

Windows Forms Discussion :

[C#]Créer un document Word


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut [C#]Créer un document Word
    Bonjour,

    Voilà, je suis en train d'essayer de créer un doc' Word à partir d'un Windows Form, j'ai trouvé ici http://jab.developpez.com/tutoriels/dotnet/word/#L7 tout ce qu'il me faut.

    Pour l'instant, je n'ai mis que ce code là :

    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
     
    private void button1_Click(object sender, EventArgs e)
    {
     
        // Connexion à Word
        Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
        msWord.Visible = false; // Mettez cette variable à true si vous souhaitez visualiser les opérations.
        object missing = System.Reflection.Missing.Value;
     
        // Attribuer le nom
        object fileName = @"Mon nouveau document.doc";
     
        Microsoft.Office.Interop.Word.Document nvDoc;
     
        if (System.IO.File.Exists((string)fileName))
        {
            // ouvrir le document existant
            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);
        }
        else
        {
            // Choisir le template
            object templateName = @"Mon Template.dot";
            // Créer le document
            nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
            // Sauver le document
            nvDoc.SaveAs(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);
        }
    }
    Je lance l'appli' et clique sur le bouton mis en place.

    Ca me sort une exception sur cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
    Et l'exception est :
    "L'exception COMException n'a pas été gérée".
    "Word n'a pas pu lire ce document. Il est peut-être corrompu."

    Ca me dit d'essayer d'ouvrir le fichier pour le réparer, mais comme il n'a pas pu le créer forcément il ne le trouve pas.

    Help please

  2. #2
    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
    Par défaut
    Tes variables fileName et templateName doivent contenir le chemin complet du fichier.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object fileName = @"C:\Mon Répertoire\Mon nouveau document.doc";
    object templateName = @"C:\Un autre Répertoire\Mon Template.dot";

  3. #3
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Merci de ta réponse, mais ça ne marche pas...

    J'ai exactement le même problème même après avoir rajouté le chemin complet.

    Cependant, quelque chose m'intrigue :
    Le template utilisé se trouve dans le répertoire des templates de Word et non avec l'application. Il vous est toujours possible de spécifier un chemin différent. De même, sans indication contraire le document est sauvé dans le répertoire spécifié dans Word.
    Citation provenant d'ici : http://jab.developpez.com/tutoriels/dotnet/word/#L7

    Donc logiquement il ne devrait pas y avoir besoin de spécifier le chemin précis si il s'enregistre dans Word si on ne précise pas de chemin.

    J'ai donc essayé en mettant uniquement le chemin dans ma variable fileName, mais rien n'y fait...

    Paumé complet !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    J'ai utilisé le meme lien que toi et chez moi ca marche nikel.
    J'ai juste ajouté la reference Word a mon projet.
    Voici mon code si ca peut t'aider:
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
            public void CreateDoc() 
     
            {
                string sPathSaveFacture = string.Empty;
     
                    Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
     
                        msWord.Visible = false;
     
                    object missing = System.Reflection.Missing.Value;
                    string sDateFile = dateFacture.Text.Replace("/", "_");
                    // Attribuer le nom
                    object fileName = string.Empty;
                    sPathSaveF = Environment.CurrentDirectory + "\\Content\\" + DateTime.Now.Year.ToString();
     
                    object pwd = "ABC";
     
     
     
                    fileName = @sPathSaveFacture + "\\" +"F_" + sDateFile + ".doc";
     
     
                    Microsoft.Office.Interop.Word.Document nvDoc;
                    if (File.Exists((string)fileName))
                    {
                        // ouvrir le document existant
                        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);
     
                        try
                        {
                       //     nvDoc.Unprotect(ref pwd);
                        }
                        catch {}
                    }
                    else
                    {
     
                        // Choisir le template
                        object templateName = "";
     
                        switch (NumRelance)
                        {
                            case 0: templateName = Environment.CurrentDirectory + "\\Content\\"+sModelCourierTypeF ; break;
                            case 1: templateName = Environment.CurrentDirectory + "\\Content\\"+sModelCourierTypeR1 ; break;
                            case 2: templateName = Environment.CurrentDirectory + "\\Content\\"+sModelCourierTypeR2 ;break;
                            case 3: templateName = Environment.CurrentDirectory + "\\Content\\"+sModelCourierTypeR3; break;
     
                            default: templateName = Environment.CurrentDirectory + "\\Content\\"+sModelCourierTypeF;break; 
                        }
     
                        // Créer le document
                        nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
                    }

  5. #5
    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
    Par défaut
    Alors ce doit être le template qui est incorrect.
    Essaye d'ouvrir ce fichier .dot directement sous Word, tu devrais avoir le même message d'erreur.

    Profite-en pour tuer tous les processus WINWORD.EXE qui trainent éventuellement dans ton gestionnaire de tâches.

  6. #6
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Je sais pourquoi il me génère une exception, c'est parce que peu importe le chemin que je lui indique, il ne trouve pas de Mon template.dot vu qu'il n'existe pas.

    Je pensais que ça allait le créer en même temps que le .doc mais apparemment ça n'est pas le cas.

    Par contre, en indiquant dans mon code un template de Word existant (SUPPORT.dot se trouvant dans C:\Program Files\Microsoft Office\OFFICE11\MACROS sous Office 2003), j'ai un .doc qui a bien été généré, mais avec les données du .dot, et ce n'est donc pas ce qui m'interresse.

    Il faudrait donc que je crée un template ?

    J'y comprends plus rien là...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    ben forcement oui faut creer un template...
    Si tu lui demande de creer "MonDoc.doc" en te basant sur un doc qui EXISTE PAS, il va avoir du mal.
    Ce que tu peux faire c'est de creer un doc en indiquant le Normal.dot qui est le modele par defaut de Word.

  8. #8
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Ouais ce que tu me dis marche skunkies, mais si j'ai plusieurs .doc a créer et que j'utilise à chaque fois Normal.dot, ça va pas me donner tout le temps le même .doc ?

    Pis une autre question pour toi skunkies, en regardant ton code j'ai vu que t'as pas mis de nom de ficher dans ta variable templateName, ça génère quand même ton .doc ?

Discussions similaires

  1. [Visual C# Express] Créer un document Word?
    Par @drien dans le forum Windows Forms
    Réponses: 6
    Dernier message: 19/08/2010, 11h18
  2. Créer un document Word avec Flex
    Par trotters213 dans le forum Flex
    Réponses: 3
    Dernier message: 15/05/2008, 10h07
  3. [Word] Récupérer résultat Mysql pour créer un document word
    Par fat dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/06/2007, 16h59
  4. Comment créer un document Word avec C++ Builder ?
    Par motte82 dans le forum C++Builder
    Réponses: 14
    Dernier message: 23/07/2006, 11h07
  5. [VB6]Créer un document word
    Par zemeilleurofgreg dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2006, 20h42

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