Ms word Word/Office Automation-如何从下拉表单字段检索选定值

Ms word Word/Office Automation-如何从下拉表单字段检索选定值,ms-word,office-interop,Ms Word,Office Interop,我正在尝试使用c#通过office automation检索word文档中所有字段的值。代码如下所示,但是如果字段是下拉列表,则范围文本的值始终为空,即使我知道它已填充。如果它是一个简单的文本字段,那么我可以看到范围文本。如何获取选定的下拉项?我觉得一定有很简单的事情我做错了 private void OpenWordDoc(string filename) { Microsoft.Office.Interop.Word.Application app = new Microsoft.Off

我正在尝试使用c#通过office automation检索word文档中所有字段的值。代码如下所示,但是如果字段是下拉列表,则范围文本的值始终为空,即使我知道它已填充。如果它是一个简单的文本字段,那么我可以看到范围文本。如何获取选定的下拉项?我觉得一定有很简单的事情我做错了

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

啊哈-如果我扫描表单字段而不是字段,那么一切都很好

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 
} 

问题解决了。呸。

啊哈-如果我扫描表单字段而不是字段,那么一切都很好

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 
} 

问题解决了。呸。

foreach中的变量名应该是
ff
而不是
f
foreach中的变量名应该是
ff
而不是
f