2010-08-10 5 views
1

J'essaie de récupérer la valeur de tous les champs dans un document Word via bureautique en utilisant C#. Le code est montré ci-dessous cependant si le champ est une liste déroulante alors la valeur du texte de gamme est toujours vide même si je sais qu'il est peuplé. Si c'est un champ de texte simple, je peux voir le texte de la gamme. Comment puis-je obtenir l'élément déroulant sélectionné? Je pense qu'il doit y avoir quelque chose d'assez simple que je fais mal ...Word/Office Automation - Comment récupérer la valeur sélectionnée à partir d'un champ de formulaire déroulant

private void OpenWordDoc(string filename) { 
    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application(); 
    Document doc = app.Documents.Open(filename, ReadOnly: true, Visible: false); 

    foreach (Field f in doc.Fields) { 
    string bookmarkName = "??"; 
    if (f.Code.Bookmarks.Count > 0) { 
     bookmarkName = f.Code.Bookmarks[1].Name; // have to start at 1 because it is vb style! 
    } 
    Debug.WriteLine(bookmarkName); 
    Debug.WriteLine(f.Result.Text); // This is empty when it is a drop down field 
    } 
    doc.Close(); 
    app.Quit(); 
} 

Répondre

1

Aha - Si je parcourons FormFields au lieu de champs alors tout est bon ...

foreach (FormField f in doc.FormFields) { 
    string bookmarkName = "??"; 
    if (ff.Range.Bookmarks.Count > 0) { 
    bookmarkName = ff.Range.Bookmarks[1].Name; // have to start at 1 because it is vb style! 
    } 
    Debug.WriteLine(bookmarkName); 
    Debug.WriteLine(ff.Result); // This is empty when it is a drop down field 
} 

Problème résolu . Phew.

Questions connexes