如何在.docx文件中找到纯文本内容控件并使用OpenXML SDK替换文本?

时间:2016-11-16 16:02:53

标签: c# ms-word openxml

我正在处理一个需要将数据输出到Word文档的程序,我在其中放置了标记的纯文本内容控件。基本上,我在编写以下方法后(使用C#)...

public static void SetContentControlText(WordprocessingDocument document, string contentControlTag, string text)
{
    // TODO: Implement this method...
}

该方法应该能够使用指定的标记填充所有纯文本内容控件,而不管它们在文档结构中的位置(即它应该能够在文档主体中找到内容控件)以及表格.etc。)。

提前致谢!

1 个答案:

答案 0 :(得分:0)

在做了一些挖掘之后,我发现/改编了以下解决方案......

public static int SetContentControlText(
    this WordprocessingDocument document,
    Dictionary<string, string> values)
{
    if (document == null) throw new ArgumentNullException("document");
    if (values == null) throw new ArgumentNullException("values");

    int count = 0;

    foreach (SdtElement sdtElement in document.MainDocumentPart.Document.Descendants<SdtElement>())
    {
        string tag = sdtElement.SdtProperties.Descendants<Tag>().First().Val;
        if ((tag != null) && values.ContainsKey(tag))
        {
            sdtElement.Descendants<Text>().First().Text = values[tag] ?? string.Empty;
            sdtElement.Descendants<Text>().Skip(1).ToList().ForEach(t => t.Remove());

            count++;
        }
    }

    return count;
}

该方法接收文档和标记/值对的字典,并返回已设置的内容控件的数量!