使用DocumentFormat.OpenXML SDK编写单词表单字段

时间:2015-06-09 10:18:10

标签: c# ms-word openxml openxml-sdk

我正在编写一个应用程序,该应用程序应使用DocumentFormat.OpenXML SDK将数据写入表单字模板中的字段。但我无法在SDK的文档对象中找到存储表单字段的属性。

我试过这段代码:

using (WordprocessingDocument document = WordprocessingDocument.Open("Path/To/document.dotx", true))
{
    document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
    MainDocumentPart mainPart = document.MainDocumentPart;

    var fields = mainPart.Document.Body.Descendants<FormFieldData>();

    foreach (var field in fields)
    {
        if (field.GetType() == typeof(FormFieldData))
        {
            if (field.LocalName == "Name")
            {
                Console.WriteLine("Hi!");
            }   
        }
     }
}

但是字段始终为空。

2 个答案:

答案 0 :(得分:2)

您可以通过替换此行来完成此操作:

if (field.LocalName == "Name")

这一个:

if (((FormFieldName)field.FirstChild).Val.InnerText.Equals("Name"))

此外,您可以使用以下代码使用另一个SO答案中提供的函数SetFormFieldValue在表单字段元素中放置一个文本:

        if (((FormFieldName)field.FirstChild).Val.InnerText.Equals("Name"))
        {
            TextInput text = field.Descendants<TextInput>().First();
            SetFormFieldValue(text, "Put some text inside the field");
        }

有关SetFormFieldValue

的实施,请参阅Write data into TextInput elements in docx documents with OpenXML 2.5

答案 1 :(得分:0)

您的文档是否可能使用自定义属性填写表单字段?试着看看this MSDN page,它解释了如何阅读和操作自定义属性。