惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
量子位
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
博客园 - 聂微东
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
C# 实现 Word 文档文本批量替换 (动态填充)
LAYONTHEGROU · 2026-05-19 · via 博客园_首页

在各类企业级应用中,程序化修改 Word 文档是一个高频需求——批量更新合同模板中的占位符、动态生成个性化的报告与报价单、统一标准化文档中的术语表述等。实现这类需求的核心技术挑战在于:Word 文档采用复杂的内置结构存储文本与格式,简单的字符串操作极易破坏文档的格式完整性,导致输出结果无法满足正式应用的标准。

Free Spire.Doc for .NET 是一套在无需本地安装 Microsoft Office 环境下直接操作 Word 文档的免费 .NET API,其 DocumentParagraph 类提供了 ReplaceFindAllString 等多个文本查找与替换的重载方法,支持普通字符串、正则表达式匹配等场景。以下将从基础用法到高级技巧逐步展开。


环境准备

将 Free Spire.Doc 添加到项目中最便捷的方式是通过 NuGet 包管理器。在 Visual Studio 的“管理 NuGet 程序包”中搜索 FreeSpire.Doc 并安装,或在包管理器控制台中执行以下命令:

Install-Package FreeSpire.Doc

安装完成后,在代码文件顶部引入核心命名空间:

using Spire.Doc;
using Spire.Doc.Documents;
using System.Text.RegularExpressions;

基础示例:替换 Word 中的指定文本

用到的免费 .NET 库的核心替换方法是 Document.Replace(string matchString, string newValue, bool caseSensitive, bool wholeWord),该方法在整个文档范围内查找指定的字符串并将其替换为新文本。

参数说明

  • matchString:要查找的目标文本
  • newValue:替换后的新文本
  • caseSensitive:是否区分大小写(true 为区分,false 为不区分)
  • wholeWord:是否仅匹配完整单词(true 时仅替换独立的完整单词)

以下示例演示将文档中的旧公司名称替换为新名称:

public static void BasicReplace(string inputPath, string outputPath)
{
    // 创建 Document 对象并加载文档
    Document document = new Document();
    document.LoadFromFile(inputPath);
    
    // 执行替换操作:不区分大小写,匹配完整单词
    document.Replace("old_company_name", "NewTech Solutions Inc.", false, true);
    
    // 保存修改后的文档
    document.SaveToFile(outputPath, FileFormat.Docx);
    document.Close();
}

该方法在替换过程中能够保留原文本的格式与排版,确保文档的其他元素(如图片、表格、页眉页脚等)不受影响。

可选:仅替换首次出现的文本

若业务需求仅需将文档中第一次出现的目标文本进行替换,可在调用 Replace 方法之前将 Document.ReplaceFirst 属性设置为 true

public static void ReplaceFirstInstance(string inputPath, string outputPath)
{
    Document document = new Document();
    document.LoadFromFile(inputPath);
    
    // 将替换模式设置为仅替换第一个匹配项
    document.ReplaceFirst = true;
    document.Replace("placeholder", "actual value", false, true);
    
    document.SaveToFile(outputPath, FileFormat.Docx);
    document.Close();
}

进阶:使用正则表达式进行模式匹配替换

对于需要匹配某种模式而非固定字符串的场景(例如替换所有占位符 {{...}}、匹配特定格式的编号等),可以使用 Document.Replace(Regex regex, string newValue) 方法的重载版本。

以下示例展示如何将文档中所有由花括号包裹的占位符替换为指定的值:

using System.Text.RegularExpressions;

public static void RegexReplace(string inputPath, string outputPath)
{
    Document document = new Document();
    document.LoadFromFile(inputPath);
    
    // 匹配形如 {{placeholder}} 的占位符模式
    Regex placeholderRegex = new Regex(@"\{\{.*?\}\}");
    
    // 将所有匹配的占位符替换为目标字符串
    document.Replace(placeholderRegex, "replacement text");
    
    document.SaveToFile(outputPath, FileFormat.Docx);
    document.Close();
}

更复杂的使用场景中,还可调用 Replace(Regex, TextSelection) 等重载变体进行带格式的替换操作。


扩展:查找文本并做进一步处理(查找高亮)

除了直接替换,Document.FindAllString 方法可以获取所有匹配的 TextSelection 对象集合,便于在替换前对匹配结果进行预览、统计,或在替换后应用格式设置(如高亮显示)。

using System.Drawing;

public static void FindAndHighlight(string inputPath, string outputPath)
{
    Document document = new Document();
    document.LoadFromFile(inputPath);
    
    // 查找所有匹配的文本
    TextSelection[] selections = document.FindAllString("keyword", false, true);
    
    foreach (TextSelection selection in selections)
    {
        // 将匹配的文本设置为高亮黄色
        selection.GetAsOneRange().CharacterFormat.HighlightColor = Color.Yellow;
    }
    
    document.SaveToFile(outputPath, FileFormat.Docx);
    document.Close();
}

总结

本文提供了一套较为完整的 Word 文档文本替换示例:从基础的 Replace 字符串替换、仅替换首次出现、正则表达式模式匹配,到 FindAllString 查找并做格式调整,基本覆盖了 .NET 环境下 Word 文档批量处理的常见需求。

在实际项目中,建议根据文档规模和业务复杂度选择合适的替换策略;对于需要格式保留的复杂内容场景,可进一步利用其他重载或自行封装处理。