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

Dotnet Discussion :

[C#][MSWORD]Accès aux propriétés d'un document WORD


Sujet :

Dotnet

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [C#][MSWORD]Accès aux propriétés d'un document WORD
    Bonjour,

    Je cherche à accéder aux propriétés d'un document WORD via une application C# .Net (VS2008).
    J'utilise la dll : Microsoft Word 11.0 Object Library.
    J'ai trouvé les objets de la dll qui m'intéressent. Seulement, bien qu'ayant suivi scrupuleusement les extraits de codent proposés sur la MSDN ou divers tutoriaux, j'en revient toujours à la même erreur de cast.

    Voici le code qui pose problème :

    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
     
    Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
     
    msWord.Visible = false;
    object missing = System.Reflection.Missing.Value;
     
    object fileName = @"C:\myFile.doc";
     
    Microsoft.Office.Interop.Word.Document nvDoc;
    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);
     
    //String test = Microsoft.VisualBasic.Information.TypeName(nvDoc.CustomDocumentProperties);
     
    Microsoft.Office.Core.DocumentProperties properties;
     
    properties = (Microsoft.Office.Core.DocumentProperties)nvDoc.CustomDocumentProperties;
     
    properties["Entete_NomAffaire"].Value = "TEST";
    La ligne qui provoque l'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    properties = (Microsoft.Office.Core.DocumentProperties)nvDoc.CustomDocumentProperties;
    L'erreur générée :

    Impossible d'effectuer un cast d'un objet COM de type 'System.__ComObject' en type d'interface 'Microsoft.Office.Core.DocumentProperties'. Cette opération a échoué, car l'appel QueryInterface sur le composant COM pour l'interface avec l'IID '{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}' a échoué en raison de l'erreur suivante : Cette interface n'est pas prise en charge (Exception de HRESULT : 0x80004002 (E_NOINTERFACE)).


    Voilà, j'ai cherché un peu partout. Le code que j'ai utilisé est quasiment mot pour mot celui que j'ai pu trouver sur la MSDN. Je ne comprends pas d'où vient cette erreur. J'ai même utilisé la dll Microsoft.VisualBasic.dll pour m'assurer que l'objet que je tente de caster "DocumentProperties" est bien de ce type.

    Merci par avance pour votre aide,

    Kuro-chan

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    J'ai résolu mon problème en utilisant la réflexion. C'est forcément un peu moins lisible... Mais ça fonctionne.

    Vous trouverez toutes les explications ici : http://support.microsoft.com/kb/303296

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Un dernier petit ajout pour ceux que ça intéresse.
    J'ai utilisé les propriétés dans mon document.
    Pour mettre à jour les champs dans le corps du documents c'est assez simple (myWordDoc.Fields) par contre, on remarque que les champs des en-têtes et pieds de page ne sont pas mis à jour.
    j'ai trouvé ici la méthode pour mettre à jour les en-tête et pieds de pages : http://www.developpez.net/forums/d59...te-word-excel/

    Je vous met en plus mon code complet:

    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
     
    _Application msWord = new Application();
    msWord.Visible = false;
     
    object missing = Missing.Value;
    object properties;
    object saveChange = true;
     
    object fileName = "myDocument.doc";
     
    _Document nvDoc;
     
    if (File.Exists((String)fileName))
    {
          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 = "myTemplate.dot";
          // Créer le document
          nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
    }
     
    // On récupère les propriétés personnalisées du document
    properties = nvDoc.CustomDocumentProperties;
    Type typeDocCustomProps = properties.GetType();
     
    String key= "maPropriete";
    String value = "AAAAA";
     
    // Modification de la propriété "maPropriété"           
    typeDocCustomProps.InvokeMember("Item", BindingFlags.Default |
                BindingFlags.SetProperty, null,
                properties, new object[] { key, value });
     
    // Mise à jour des champs dans le corps du document           
    nvDoc.Fields.Update();
     
    Sections mySectionList = nvDoc.Sections;
     
    // Mise à jour des champs dans les en-têtes du document
    foreach (Section s in mySectionList)
    {
         foreach (HeaderFooter hf in s.Headers)
              hf.Range.Fields.Update();
    }

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

Discussions similaires

  1. accès aux propriétés d'un document
    Par RedColibri dans le forum VBA Word
    Réponses: 3
    Dernier message: 21/07/2008, 12h08
  2. [COM] Accès aux infos d'un document Word (wdFieldEditTime)
    Par Przybylski dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/11/2007, 16h28
  3. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  4. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13
  5. Accès aux propriétés ScrollBar d'un composant TMemo
    Par fausto dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2003, 11h08

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