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

如何使用OpenXML清除docx模板的文本背景色(高亮)

清除Word文档文本背景色的Open XML实现

基于你现有的Open XML SDK代码,提供两种落地方案:

方案一:仅清除原标签位置的背景色

如果只想处理曾经是替换标签的文本区域,可在替换完成后遍历文档,定位原标签对应的文本块并清除背景色:

完整代码示例

// 引用必要命名空间
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.IO;
using System.Globalization;

// 原有文本替换逻辑
var filename = Path.Combine(Properties.Settings.Default.DocPath, file);
using (MemoryStream ms = new MemoryStream())
{
    var bytes = File.ReadAllBytes(filename);
    ms.Write(bytes, 0, bytes.Length);
    using (WordprocessingDocument pDoc = WordprocessingDocument.Open(ms, true))
    {
        TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo;
        TextReplacer.SearchAndReplace(pDoc, "<<FULL_NAME>>", textInfo.ToTitleCase(FULL_NAME), true);
        TextReplacer.SearchAndReplace(pDoc, "<<FIRST>>", FIRST, true);
        TextReplacer.SearchAndReplace(pDoc, "<<MIDDLE>>", MIDDLE, true);
        TextReplacer.SearchAndReplace(pDoc, "<<LAST>>", LAST, true);
        TextReplacer.SearchAndReplace(pDoc, "<<CITY>>", textInfo.ToTitleCase(info.City), true);
        TextReplacer.SearchAndReplace(pDoc, "<<ZIP>>", textInfo.ToTitleCase(info.Zip), true);
        TextReplacer.SearchAndReplace(pDoc, "<<COUNTY>>", textInfo.ToTitleCase(info.County), true);
        TextReplacer.SearchAndReplace(pDoc, "<<STATE>>", textInfo.ToTitleCase(info.State), true);

        // 清除原标签位置的背景色
        var body = pDoc.MainDocumentPart.Document.Body;
        var targetTags = new List<string> { "<<FULL_NAME>>", "<<FIRST>>", "<<MIDDLE>>", "<<LAST>>", "<<CITY>>", "<<ZIP>>", "<<COUNTY>>", "<<STATE>>" };
        
        foreach (var run in body.Descendants<Run>())
        {
            var runText = run.InnerText;
            if (targetTags.Any(tag => runText.Contains(tag)))
            {
                SetRunBackgroundColor(run);
            }
        }
    }
    // 将修改后的内容写回原文件
    File.WriteAllBytes(filename, ms.ToArray());
}

// 辅助方法:设置文本块背景色为白色
private static void SetRunBackgroundColor(Run run, string colorHex = "FFFFFF")
{
    var runProps = run.RunProperties ?? new RunProperties();
    
    // 移除已有的背景色配置
    var existingShading = runProps.Elements<Shading>().FirstOrDefault();
    if (existingShading != null)
        existingShading.Remove();
    
    // 添加白色背景(Clear模式+白色填充)
    runProps.Append(new Shading
    {
        Val = ShadingPatternValues.Clear,
        Color = "auto",
        Fill = colorHex
    });
    
    run.RunProperties = runProps;
}

方案二:全局清除所有文本背景色

如果需要把文档中所有带背景色的文本统一改成白色,直接遍历所有文本块(Run)即可:

代码片段(替换方案一的清除逻辑)

// 在WordprocessingDocument代码块内替换方案一的清除逻辑
var body = pDoc.MainDocumentPart.Document.Body;
foreach (var run in body.Descendants<Run>())
{
    SetRunBackgroundColor(run);
}

注意事项

  1. 确保已安装DocumentFormat.OpenXml NuGet包(版本2.0及以上)
  2. 内存流修改完成后必须写回原文件,否则修改不会生效
  3. 若替换后原标签已被完全替换,方案一将无法匹配,此时建议使用方案二

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:00:02