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 :

Génération Word et la fermeture du fichier


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Génération Word et la fermeture du fichier
    Bonjour à tous !!!

    J'ai un problème depuis pas mal de temps et qui commence sérieusement à gêner la progression de mon projet.
    Je m'explique. J'ai une application iPhone qui récolte des données et les envoie vers un serveur ASP.NET contenant un script C# permettant de générer un word à partir de ces données. Tout ce processus fonctionne très bien la PREMIERE FOIS.
    Si je ré-exécute ce code je reçois une erreur de mon serveur :

    Détails de l'exception: </b>System.Runtime.InteropServices.COMException: Ce fichier est en lecture seule. (C:\inetpub\wwwroot\Documents\rapport.doc)
    Cette erreur se produit à la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     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);

    J'en conclu donc que le fichier que j'avais enregistré précédemment n'est pas fermé et pourtant j'ai bien les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Fermer le document
                 ((Microsoft.Office.Interop.Word._Document)nvDoc).Close(ref saveChanges, ref missing, ref missing);
     
                // Fermeture de word
                 ((Microsoft.Office.Interop.Word._Application)msWord).Quit(ref missing, ref missing, ref missing);
    Je n'ai pas d'erreur lors de ma première génération.. On dirait tout simplement qu'une fois le fichier généré, ce dernier ne se ferme pas. Je vous mets tout la fonction de génération :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public void generateDocument()
            {
                // Connexion à Word
                string pathTemplates = Server.MapPath("./templates/");
                string pathDocuments = Server.MapPath("./Documents/");
                string pathImgBefore = Server.MapPath("./Upload/imageBefore.jpg");
                string pathImgAfter = Server.MapPath("./Upload/imageAfter.jpg");
                Object myFalse = false ;
                Object myTrue = true ;
     
                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 = pathDocuments + "rapport.doc";
     
                Microsoft.Office.Interop.Word.Document nvDoc = new Microsoft.Office.Interop.Word.Document();
     
                // Tester s'il s'agit d'un nouveau document ou d'un document existant.
                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 = pathTemplates + "template2.dot";
                    // Créer le document
                    nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
                }
     
     
                // On remplit les champs du template
                object field = "date";
                nvDoc.FormFields.get_Item(ref field).Result = DateTime.Today.ToShortDateString();
                field = "choix1";
                nvDoc.FormFields.get_Item(ref field).Result = choix1;
                field = "choix2";
                nvDoc.FormFields.get_Item(ref field).Result = choix2;
     
                field = "controles";
     
                for (int i = 1; i < tabControles.Length; i++)
                {
                    nvDoc.FormFields.get_Item(ref field).Result += "- " + tabControles[i];
     
                }
     
                field = "c1";
                nvDoc.FormFields.get_Item(ref field).Result = c1;
                field = "c2";
                nvDoc.FormFields.get_Item(ref field).Result = c2;
                field = "c3";
                nvDoc.FormFields.get_Item(ref field).Result = c3;
                field = "c4";
                nvDoc.FormFields.get_Item(ref field).Result = c4;
                field = "c5";
                nvDoc.FormFields.get_Item(ref field).Result = c5;
     
                field = "imgBefore";
                nvDoc.FormFields.get_Item(ref field).Result = "";
               Object imgRange = nvDoc.FormFields.get_Item(ref field).Range;
     
               nvDoc.InlineShapes.AddPicture(pathImgBefore, ref myFalse, ref myTrue, ref imgRange);
     
               field = "imgAfter";
               nvDoc.FormFields.get_Item(ref field).Result = "";
               imgRange = nvDoc.FormFields.get_Item(ref field).Range;
     
               nvDoc.InlineShapes.AddPicture(pathImgAfter, ref myFalse, ref myTrue, ref imgRange);
                //Fin remplissage des champs
     
     
                // 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);
     
     
                object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
     
     
                // Fermer le document
                 ((Microsoft.Office.Interop.Word._Document)nvDoc).Close(ref saveChanges, ref missing, ref missing);
     
                // Fermeture de word
                 ((Microsoft.Office.Interop.Word._Application)msWord).Quit(ref missing, ref missing, ref missing);
            }
    Je présente ce projet vendredi matin ... et dans l'ordre actuel des choses, pour pouvoir regénérer le fichier, je suis obligé d'aller sur le serveur ... faire un IISRESET et supprimer le fichier manuellement ....

    Est ce que vous avez une idée de ce qui manque ou de ce qui cloche ?? Là je ne vois plus ....

    Merci d'avance pour votre aide précieuse ...

    MoKeS

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Je suis passé en mode fenêtré pour voir ce qui se passe.
    La première fois le word se lance, se remplit et se referme.
    La seconde fois, le word se lance, se remplit mais tout ça en lecture seule ....

    Je ne comprends pas pourquoi !

Discussions similaires

  1. [VBA-Word] lancement de macro à la fermeture de fichier
    Par perophron dans le forum VBA Word
    Réponses: 2
    Dernier message: 22/06/2007, 15h32
  2. Pb de fermeture de fichiers .js
    Par Cako19 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/12/2005, 15h17
  3. Réponses: 3
    Dernier message: 19/12/2005, 14h11
  4. Fermeture de fichier
    Par patmaba dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 05/10/2005, 11h00
  5. macros word et lecture dans un fichier excel
    Par antrax2013 dans le forum Windows
    Réponses: 2
    Dernier message: 01/10/2005, 19h05

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