You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenXML C#修改Docx文件时文本拆分致替换失败的解决方法

解决OpenXML SDK替换Word文本时字符串被拆分的问题

在Word的OpenXML结构中,视觉上连续的文本经常会被拆分为多个<w:t>(Text)元素,这可能是由于编辑操作、格式变化或Word内部存储机制导致的。直接遍历单个Text节点无法匹配到被拆分的完整目标字符串,因此替换失效。

解决方案:合并Run内的Text节点后再替换

先将每个Run中的所有Text节点合并为一个,确保同一Run内的文本是完整的,再执行替换操作:

using (WordprocessingDocument doc = WordprocessingDocument.Open(documentName, true))
{
    var document = doc.MainDocumentPart.Document;

    // 合并每个Run中的多个Text节点
    foreach (var run in document.Descendants<Run>())
    {
        var textNodes = run.Descendants<Text>().ToList();
        if (textNodes.Count <= 1) continue;

        // 拼接所有Text内容到第一个节点
        string combinedText = string.Concat(textNodes.Select(t => t.Text));
        textNodes[0].Text = combinedText;

        // 删除多余的Text节点
        for (int i = 1; i < textNodes.Count; i++)
        {
            textNodes[i].Remove();
        }
    }

    // 执行文本替换
    foreach (var text in document.Descendants<Text>())
    {
        text.Text = text.Text.Replace("[COMPANY NAME]", "TEST INC");
    }

    // 保存修改后的文档
    document.Save();
}

说明

  1. 合并Text节点:同一个Run下的Text节点属于同一文本块,合并后能保证文本的完整性,避免因拆分导致的匹配失败。
  2. 全局替换:合并完成后,遍历所有Text节点执行替换即可匹配到完整的目标字符串。
  3. 跨Run的情况:如果目标字符串被拆分到不同Run中,需要额外处理连续Run的文本拼接与替换,这种场景可以通过查找相邻Run的Text内容,判断是否拼接后包含目标字符串,再调整节点内容和结构。

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:54:33