C# 实现 Word 文档文本批量更换 (动态添补)

[复制链接]
发表于 2026-5-19 18:20:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在各类企业级应用中,步伐化修改 Word 文档是一个高频需求——批量更新条约模板中的占位符、动态天生个性化的陈诉与报价单、同一标准化文档中的术语表述等。实现这类需求的焦点技能寻衅在于:Word 文档接纳复杂的内置布局存储文本与格式,简朴的字符串操纵极易粉碎文档的格式完备性,导致输出结果无法满足正式应用的标准。
Free Spire.Doc for .NET 是一套在无需当地安装 Microsoft Office 环境下直接操纵 Word 文档的免费 .NET API,其 Document 和 Paragraph 类提供了 Replace 和 FindAllString 等多个文本查找与更换的重载方法,支持平凡字符串、正则表达式匹配等场景。以下将从根本用法到高级本事渐渐睁开。
环境准备

将 Free Spire.Doc 添加到项目中最便捷的方式是通过 NuGet 包管理器。在 Visual Studio 的“管理 NuGet 步伐包”中搜刮 FreeSpire.Doc 并安装,或在包管理器控制台中实验以下下令:
  1. Install-Package FreeSpire.Doc
复制代码
安装完成后,在代码文件顶部引入焦点定名空间:
  1. using Spire.Doc;
  2. using Spire.Doc.Documents;
  3. using System.Text.RegularExpressions;
复制代码
根本示例:更换 Word 中的指定文本

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

  • matchString:要查找的目标文本
  • newValue:更换后的新文本
  • caseSensitive:是否区分巨细写(true 为区分,false 为不区分)
  • wholeWord:是否仅匹配完备单词(true 时仅更换独立的完备单词)
以下示例演示将文档中的旧公司名称更换为新名称:
  1. public static void BasicReplace(string inputPath, string outputPath)
  2. {
  3.     // 创建 Document 对象并加载文档
  4.     Document document = new Document();
  5.     document.LoadFromFile(inputPath);
  6.    
  7.     // 执行替换操作:不区分大小写,匹配完整单词
  8.     document.Replace("old_company_name", "NewTech Solutions Inc.", false, true);
  9.    
  10.     // 保存修改后的文档
  11.     document.SaveToFile(outputPath, FileFormat.Docx);
  12.     document.Close();
  13. }
复制代码
该方法在更换过程中可以大概生存原文本的格式与排版,确保文档的其他元素(如图片、表格、页眉页脚等)不受影响。
可选:仅更换初次出现的文本

若业务需求仅需将文档中第一次出现的目标文本举行更换,可在调用 Replace 方法之前将 Document.ReplaceFirst 属性设置为 true:
  1. public static void ReplaceFirstInstance(string inputPath, string outputPath)
  2. {
  3.     Document document = new Document();
  4.     document.LoadFromFile(inputPath);
  5.    
  6.     // 将替换模式设置为仅替换第一个匹配项
  7.     document.ReplaceFirst = true;
  8.     document.Replace("placeholder", "actual value", false, true);
  9.    
  10.     document.SaveToFile(outputPath, FileFormat.Docx);
  11.     document.Close();
  12. }
复制代码
进阶:利用正则表达式举行模式匹配更换

对于须要匹配某种模式而非固定字符串的场景(比方更换全部占位符 {{...}}、匹配特定格式的编号等),可以利用 Document.Replace(Regex regex, string newValue) 方法的重载版本
以下示例展示怎样将文档中全部由花括号包裹的占位符更换为指定的值:
  1. using System.Text.RegularExpressions;
  2. public static void RegexReplace(string inputPath, string outputPath)
  3. {
  4.     Document document = new Document();
  5.     document.LoadFromFile(inputPath);
  6.    
  7.     // 匹配形如 {{placeholder}} 的占位符模式
  8.     Regex placeholderRegex = new Regex(@"\{\{.*?\}\}");
  9.    
  10.     // 将所有匹配的占位符替换为目标字符串
  11.     document.Replace(placeholderRegex, "replacement text");
  12.    
  13.     document.SaveToFile(outputPath, FileFormat.Docx);
  14.     document.Close();
  15. }
复制代码
更复杂的利用场景中,还可调用 Replace(Regex, TextSelection) 等重载变体举行带格式的更换操纵。
扩展:查找文本并做进一步处置惩罚(查找高亮)

除了直接更换,Document.FindAllString 方法可以获取全部匹配的 TextSelection 对象聚集,便于在更换前对匹配结果举行预览、统计,或在更换后应用格式设置(如高亮表现)。
  1. using System.Drawing;
  2. public static void FindAndHighlight(string inputPath, string outputPath)
  3. {
  4.     Document document = new Document();
  5.     document.LoadFromFile(inputPath);
  6.    
  7.     // 查找所有匹配的文本
  8.     TextSelection[] selections = document.FindAllString("keyword", false, true);
  9.    
  10.     foreach (TextSelection selection in selections)
  11.     {
  12.         // 将匹配的文本设置为高亮黄色
  13.         selection.GetAsOneRange().CharacterFormat.HighlightColor = Color.Yellow;
  14.     }
  15.    
  16.     document.SaveToFile(outputPath, FileFormat.Docx);
  17.     document.Close();
  18. }
复制代码

总结

本文提供了一套较为完备的 Word 文档文本更换示例:从根本的 Replace 字符串更换、仅更换初次出现、正则表达式模式匹配,到 FindAllString 查找并做格式调解,根本覆盖了 .NET 环境下 Word 文档批量处置惩罚的常见需求。
在现实项目中,发起根据文档规模和业务复杂度选择符合的更换战略;对于须要格式生存的复杂内容场景,可进一步利用其他重载或自行封装处置惩罚。

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表