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

发布于 2024-09-13 21:22:41 字数 756 浏览 7 评论 0原文

我正在尝试使用 C# 通过办公自动化检索 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();
}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事↓在人 2024-09-20 21:22:41

啊哈 - 如果我扫描 FormFields 而不是 Fields 那么一切都很好......

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 
} 

问题解决了。唷。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文