当前位置: 首页 > 知识库问答 >
问题:

WordprocessingDocument:如何替换包含在一组特殊字符中的特定文本?

尤博达
2023-03-14

我需要根据模板生成几个word文档。在每个文档中,都需要替换某些字符串(所有字符串都包含在一组双大括号中,以便轻松区分)。

我试过:

**阅读整个模板,并使用正则表达式替换单词的所有出现。替换

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        string docText = null;
        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
            docText = sr.ReadToEnd();

        foreach (var key in keysToSearch)
            docText = new Regex(key, RegexOptions.IgnoreCase).Replace(docText, replaceText);

        using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
            sw.Write(docText);
    }

**还可以访问每个Text元素

using ( WordprocessingDocument doc =
                    WordprocessingDocument.Open(@"yourpath\testdocument.docx", true))
            {
                var body = doc.MainDocumentPart.Document.Body;
                var paras = body.Elements<Paragraph>();

                foreach (var para in paras)
                {
                    foreach (var run in para.Elements<Run>())
                    {
                        foreach (var text in run.Elements<Text>())
                        {
                            if (text.Text.Contains("{{FullName}}"))
                            {
                                text.Text = text.Text.Replace("{{FullName}}", "replaced-text");
                            }
                        }
                     }
                }
          }

但上述解决方案都不管用,因为在中国。docx文件所有这些花括号都存储在不同的文本元素中(

            <w:r w:rsidR="00786C31" w:rsidRPr="00475C3D">
                <w:rPr>
                    <w:b/>
                    <w:sz w:val="36"/>
                    <w:highlight w:val="yellow"/>
                    <w:lang w:val="es-PE"/>
                </w:rPr>
                <w:t>{{</w:t>
            </w:r>
            <w:proofErr w:type="spellStart"/>
            <w:r w:rsidR="001B7FC4" w:rsidRPr="00475C3D">
                <w:rPr>
                    <w:b/>
                    <w:sz w:val="36"/>
                    <w:highlight w:val="yellow"/>
                    <w:lang w:val="es-PE"/>
                </w:rPr>
                <w:t>FullName</w:t>
            </w:r>
            <w:proofErr w:type="spellEnd"/>
            <w:r w:rsidR="00786C31" w:rsidRPr="00475C3D">
                <w:rPr>
                    <w:b/>
                    <w:sz w:val="36"/>
                    <w:highlight w:val="yellow"/>
                    <w:lang w:val="es-PE"/>
                </w:rPr>
                <w:t>}}</w:t>
            </w:r>

有没有什么方法可以使用特殊字符在模板中标记变量,以便轻松找到并替换它们?


共有1个答案

丘浩宕
2023-03-14

我们使用类似的方法将变量存储到文档中,然后替换它。关于这方面的一些经验:如果您更改了一个文档并简单地保存了它,那么这个字符通常会按照上述方式进行转换。如果选择“另存为”,则文档通常会被完全重写,特殊字符将保留。我们对| | lastname | |等双字符有很好的经验,可以在使用“另存为”方法时正确保存它们。管道标志似乎不是由MS word编码的

 类似资料:
  • 问题内容: 我该如何更换: “ã”和“ a” “é”和“ e” 在PHP中?这可能吗?我读过某处我可以使用基本字符的ascii值和重音符号的ascii值进行一些数学运算,但是现在找不到任何参考。 问题答案: 这个答案是不正确的。 编写它时,我不理解Unicode规范化。查看francadaval的评论和链接 签出Normalizer类来执行此操作。文档很好,所以我将其链接起来,而不是在这里重复:

  • 我有一个包含以下列的表: 然后,我手动将更新sql编写为 现在,这个解决方案对我来说并不现实。我查看了以下与Regex相关的链接和它周围的其他链接。 更新和替换字符串的一部分 https://www.codeproject.com/questions/456246/replace-special-characters-in-sql 我如何编写能够处理所有这些特殊字符的更新sql?

  • 问题内容: 我正在使用urllib从网站获取html字符串,并且需要将html文档中的每个单词放入列表中。 这是我到目前为止的代码。我不断收到错误消息。我还复制了以下错误。 这是错误。 问题答案: str.replace是您要执行的操作错误的函数(除了使用不正确之外)。您想用空格代替集合的任何字符,而不是用单个空格代替整个集合(后者是replace的作用)。您可以使用以下翻译: 这将创建一个映射,

  • 有没有办法用gsub替换R中的特殊字符串?我有几列里面有,我想把它改为,但是gsub不起作用 下面是一个例子: 我收到以下输出:

  • 我想在java中将所有“特殊字符”替换为特殊字符 例如“现金” 我有一个示例CSV文件 这里的CSV标题是“What”和“Where” 预期产出 示例代码如下 所有特殊字符、所有空格和双引号都应删除并替换为所需的输出。 我使用的是值。replaceAll(“[^A-Za-z0-9]”,“”),但它不工作。 错误 感谢您的帮助。regex的新成员。

  • 问题内容: 我想删除的特殊字符,如多次出现,,,从我的java字符串由单下划线。我试过了 并且似乎用下划线替换了连续的相同类型的特殊字符,但否则不起作用。例如: 变成 (下划线有2个。)但是应该是。 同样对于失败的情况。我也尝试使用regex并做了一个正则表达式 但这仍然无济于事。我该如何实现? 问题答案: 注意,这是对与第一个捕获组匹配的 内容 的反向引用。要实际匹配字符类中的一个或多个任何字符