检索隐藏的文本块并替换其中两个之间的所有内容

Retrieve hidden text blocks and replace all content between two of them

我想使用 OpenXML 通过将给定文档作为模板来自动创建 Word 文档。此模板包含具有特殊语法的文本块(即 «tagname[»...«]tagname»),其形式为隐藏文本(在字体对话框中,效果部分的 'Hidden' 复选框已激活),以便在打印文档时不会显示它们。

根据 tagname,我想用一些其他内容替换模板文件中可能已经存在于开始和结束标记之间的任何内容(例如,在 «today[»01/01/2000«]today» 中,内容 01/01/2000 将替换为 07/06/2018),最好保留格式(例如粗体、斜体或文本颜色)。

如何检索隐藏的文本部分,是否有一种简单的方法可以使用 C# 替换相应标签之间的任何内容?

我不确定您的模板中的文本块到底是什么。相反,您可以在需要的地方使用开发人员选项中的内容控件,然后您可以从内容控件的属性中命名它们。

今天 将是内容控件的名称

在模板中拥有所有内容控件后,您可以使用名称查找特定的内容控件并添加您想要的新值。

这是给你一个想法的片段。

   // Title is name of content control(today), value is what you want to add(1/01/2000)

  private static void UpdateControl(WordprocessingDocument document, string title, string value)
    {
        MainDocumentPart mainPart = document.MainDocumentPart;
        var sdtRuns = mainPart.Document.Descendants<SdtRun>()
        .Where(run => run.SdtProperties.GetFirstChild<Tag>().Val.Value == title);

        foreach (SdtRun sdtRun in sdtRuns)
        {
            sdtRun.Descendants<Text>().First().Text = value;
        }

        document.MainDocumentPart.Document.Save();
    }