views:

14

answers:

1

Hi,

I am trying to retrieve the value of all fields in a word document via office automation using c#. The code is shown below however if the field is a drop-down then the value of the range text is always empty even though I know it is populated. If it is a simple text field then I can see the range text. How do I get the selected drop down item? I feel there must be something quite simple that I'm doing wrong...

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();
}
A: 

Aha - If I scan through FormFields instead of Fields then all is good...

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 
} 

Problem solved. Phew.

Randolph