C# 如何从Word文档usng Open XML中的控件读取数据

C# 如何从Word文档usng Open XML中的控件读取数据,c#,ms-word,openxml,C#,Ms Word,Openxml,我正在使用OpenXMLSDK2.0用C编写代码。我在Word文档中定义了一些控件,如文本框、选择选项等。我想通过下面给出的示例程序读取它们的数据 WordprocessingDocument InputWordDocument = WordprocessingDocument.Open(@"C:\Users\jayant\Desktop\Template.docx", false); foreach (Control ctrl in InputWordDocument.MainDocument

我正在使用OpenXMLSDK2.0用C编写代码。我在Word文档中定义了一些控件,如文本框、选择选项等。我想通过下面给出的示例程序读取它们的数据

WordprocessingDocument InputWordDocument = WordprocessingDocument.Open(@"C:\Users\jayant\Desktop\Template.docx", false);
foreach (Control ctrl in InputWordDocument.MainDocumentPart.Document.Body.Descendants<Control>())
{
    Console.WriteLine(ctrl.Name.Value);
}
但它显示控件的名称,而不是它们的值


如何获取值?

您必须使用DocumentFormat.OpenXml.Wordprocessing.Control类,而不是System.Windows.Forms.Control类! 更改后,您必须通过子节点

WordprocessingDocument InputWordDocument = WordprocessingDocument.Open(@"C:\Users\jayant\Desktop\Template.docx", false);
foreach (DocumentFormat.OpenXml.Wordprocessing.Control ctrl in InputWordDocument.MainDocumentPart.Document.Body.Descendants<Control>())
{
    ...
}

提示:使用XmlNode更容易处理。

您必须使用ctrl.Id来获取关系Id,而不是ctrl.Name。您需要此关系id才能访问存储在其他位置的控件内容


之后,您可以调用MainDocumentPart.GetPartByIdctrl.Id并获取控件数据。在使用任何东西之前,请记住必须将其转换为正确的类型。

任何东西都不起作用。。实际上,我使用开放式XML生产力工具比较了两个docx文件,其中一个文件具有无数据控制权,另一个文件具有数据控制权。。但是在比较过程中没有发现任何数据:我正在使用XmlNode读取word文件,您也应该尝试一下。现在我看到了问题。。。您使用的是System.Windows.Forms.Controls,而不是openxml中的控件!不因为当我打印ctrl.Name时,它会打印单词fileOk的控件名,我最后要告诉你的是,用XMLNode试试!你能给我一个代码片段吗?如果可能的话,这将是一件伟大的事情: