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 :

get_Item erreur pilotage Word


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut get_Item erreur pilotage Word
    Bonjour, actuellement en stage, je développe une appli C# générant un document word en fonctions d'infos saisies dans un WinForm (basé sur un document modèle que j'ouvre et que je modifie).

    Sur ce document modèle Word, il y a des cases à cocher, que j'aimerai cocher en fonction d'une checkbox sur le Winform (Si c'est coché sur le form, cocher sur le word...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    using Word = Microsoft.Office.Interop.Word;
    using Microsoft.Office.Interop.Word;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Word.Application application = new Word.Application();
    Word.Document document = application.Documents.Open(@"C:\Users\Daft\Documents\Stage\Rapport diagnostic.doc");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    object oCheckBox2 = "CheckBox2";
    document.FormFields.get_Item(ref oCheckBox2).CheckBox.Value = true;
    ceci est juste un test sur une CheckBox Word nommée CheckBox2 si je vais dans les propriétés de la CheckBox en mode développeur sur Word.
    Pas de problème à la compilation, mais quand j'appuie sur le bouton d'envoi/modification de mon WinForm, j'ai une exception "Le membre de la collection requis n'existe pas" à Microsoft.Office.Interop.Word.FormFields.get_Item(Object& Index)

    J'utilise la dll Word 14.0 Object Library.

    Je vous supplie de m'aider je bloque sur ceci depuis environ 24h maintenant et cela m'empêche totalement d'avancer...

    Par avance merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut haaa le pilotage de Word que de souvenirs ^^
    Ici de toute évidence il n'y a pas de field "checkBox2" dans ton document. Es-tu sûr d'avoir mis ce champ ?
    Pour rappel il faut le déclarer comme champs de fusion onglet publipostage.

    Moi je passerai plutôt par un foreach sur les champs de ton doc et dès que tu as le champs dont le nom correspond tu fais ta mise en forme. Ca te permet de contrôler également que tu as bien ton champs.
    Tu peux également utiliser les signets. Le tout est d'avoir une balise pour dire ici je fais la mise en forme de tel élément; là celle de cet autre élément.

    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
    foreach (Microsoft.Office.Interop.Word.Field champ in document.Content.Fields)
    {
        //on ne s'interesse qu'aux champs de fusion
        if (champ .Type == WdFieldType.wdFieldMergeField)
        {
            switch(champ .result.name)
            {
                case "CheckBox2" :
                //todo
                break;
            }
        }
    }
     
    Tiens nous au courant.
    gl

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord, merci bien pour ton aide !
    Pour ce qui est de la checkbox Word sur laquelle j'essaie d’effectuer ce test a pour nom CheckBox2 si je vais dans ses propriétés du mode développeur

    Je voulais aussi préciser que je ne suis pas à l'origine du document modèle, c'est un doc qui a été créé sur office 2003 je n'ai donc aucune idée de la façon dont elle a été ajoutée (sur office 2010 onglet développeur).

    Pour rappel il faut le déclarer comme champs de fusion onglet publipostage.
    Dans l'onglet publipostage, le bouton insérer un champ de fusion est en grisé, ainsi que la plupart des boutons de cet onglet, je n'ai pas utilisé le publipostage en fait, lors de l'éxecution du WinForm de mon programme, je récupère les infos des textboxes, et je les utilise dans une fonction SearcheAndReplace (Textbox_nom.Text remplace "{Nom}" dans le doc par exemple)

    Pour finir, j'ai essayé d'utiliser ton code, et j'ai une erreur au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    switch(champ.Result.Name)
    L'autocomplétion ne me propose pas de Name et si je tente de le mettre j'ai l'erreur 'Microsoft.Office.Interop.Word.Range' ne contient pas une définition pour 'Name' et aucune méthode d'extension 'Name' acceptant un premier argument de type 'Microsoft.Office.Interop.Word.Range' n'a été trouvée

    Désolé si je ne suis pas très clair...
    Et merci encore pour ton aide

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Bonjour,

    désolé c'est une erreur de ma part j'ai écris le code de tête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    switch(champ.Result.Text)
    Si jamais tu veux insérer des champs de fusion moi je les copie d'un ancien doc... pas très pro mais ça fonctionne...
    Mp moi ton email et je t'envoie un doc qui en contient un. Tu le collera dans ton modèle pour tester.

    A vrai dire je pense que ce n'est pas la fonction première des champs de fusion telle que l'a pensé MS. Mais bon moi je les utilise comme balise en gros...
    Essayes de voir du coté des signets ?

Discussions similaires

  1. [VB.NET] pilotage word : champ de formulaire
    Par Kropernic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/07/2006, 12h15
  2. Pilotage word
    Par krfa1 dans le forum Access
    Réponses: 17
    Dernier message: 13/03/2006, 07h05
  3. [.NET] Pilotage Word et licence
    Par aldbaran dans le forum Framework .NET
    Réponses: 3
    Dernier message: 03/01/2006, 15h01
  4. [C#] Pilotage Word
    Par diaboloche dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/12/2005, 21h39
  5. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09

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