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

推荐订阅源

爱范儿
爱范儿
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
S
SegmentFault 最新的问题
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
雷峰网
雷峰网
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
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 文档批量处理的常见需求。

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