2012-09-04 37 views
1

我正在使用C#编写代码,使用Open XML SDK 2.0。我在Word文档像文本框,选择选项等。我想以编程方式读取其数据(如下示例)..如何从Word中的控件读取数据文档usng打开XML

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

定义了一些控制,但它显示的控件不是他们的价值的名义。

如何获取值?

回答

2

您必须使用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更容易处理。

+0

我试过了。它不给任何值 –

+0

我的不好,尝试ctrl.Text。 –

+0

没有什么作品..实际上,我已经比较了两个使用Open XML Productivity工具的docx文件,例如一个文件具有无数据控制和其他控制数据..但在对比期间没有找到数据:( –

0

您必须使用ctrl.Id来获取关系id而不是ctrl.Name。您需要此关系ID才能访问存储在别处的控制内容。

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

+0

谢谢我一定会试试这个 –