实战:基于 Word 书签 + Excel 数据源批量生成文档工具
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://zcmxbwcx.blog.csdn.net/article/details/162740041
一、项目背景
在工作中,经常会遇到Excel表记录的信息需要批量输出为word文件材料。当涉及的行数和不同的Excel表较多时,手动逐份填写 Word 文档不仅效率低下,而且容易出错。
为了解决这个痛点,我开发了一款Word 文档批量生成工具,它能够根据 Excel 数据表 + Word 模板(书签),可以读取不同的Excel表格和不同的Word文档模板(已经插入书签);一键批量生成Word 文档,大幅提升工作效率,无需逐个设置word邮件。
二、功能概览
| 功能模块 | 说明 |
|---|---|
| 📂文件设置 | 选择 Excel 数据源、Word 模板、工作表、输出目录 |
| 🔗字段映射 | Word 书签名 ↔ Excel 列名 的灵活映射配置 |
| 💾配置管理 | 保存/加载/导入/导出映射配置(JSON 格式) |
| 📝文件命名 | 自定义输出文件名模板,支持{列名}和{行号}占位符,自定义文字 |
| 🚀批量生成 | 异步逐行生成,进度条 + 日志实时反馈 |
软件界面预览:
三、核心实现
4.1 Excel 数据读取
使用ClosedXML读取 Excel,支持多工作表、自动识别表头列名,每行数据转为Dictionary<列名, 值>供后续替换使用。
4.2 Word 书签替换
Word 书签替换是核心难点。使用DocumentFormat.OpenXml遍历文档中的BookmarkStart,定位到对应的BookmarkEnd,替换范围内的Text元素内容。
坑点提醒:Word 的书签结构在 OpenXml 中并不总是简单的BookmarkStart → Text → BookmarkEnd。有时书签和文本处于不同层级,甚至书签可能在Run内部与Text平级。上面代码中texts.Count == 0的分支就是为了处理这种情况:需要向上查找 Run,在 Run 的 Children 中定位书签之后的 Text 元素。
五、配置文件管理
每次手动输入 Excel 列和 Word 书签的映射关系非常繁琐。我设计了配置文件的保存/加载/导出/导入功能:
- 配置以JSON 格式存储在程序目录的
Configs/文件夹 - 支持导出到任意路径、从任意路径导入配置
- 方便团队共享映射方案、多台电脑迁移
八、使用教程
Step 1:准备 Excel 数据文件
Excel 第一行为表头(列名),从第二行开始为数据。确保所有必要字段都有对应的列:
| 旧权利人姓名 | 旧证件号码 | 新权利人姓名 | 新证件号码 | 不动产权证号 | 宗地代码 |
|---|---|---|---|---|---|
| 张三 | 440281… | 张三三 | 440281… | 粤(2023)… | 440281… |
| 李四 | 440281… | 李四四 | 440281… | 粤(2023)… | 440281… |
Step 2:准备 Word 模板
在 Word 文档中需要替换的位置插入书签(插入 → 书签),书签名与 Excel 列名对应即可(也可以不同,在工具中灵活映射)。
Step 3:打开工具,配置映射
- 选择 Excel 文件和 Word 模板
- 选择工作表 → 自动检测列
- 点击"检测 Word 书签" → 自动生成映射行
- 手动调整映射关系(如有需要)
Step 4:设置文件名规则
使用字段按钮快速插入占位符,如:
更正调查_{新权利人}_{宗地代码}会自动生成:更正调查_张三三_440281004014JC00264.docx
Step 5:开始生成
点击"开始生成"按钮,工具将以异步方式逐行处理,进度条和日志区域实时反馈。
九、总结
这个项目虽然功能不算复杂,但涵盖了 .NET WPF 桌面应用开发的多个关键知识点:
| 技术点 | 应用 |
|---|---|
| OpenXml Word 书签替换 | 精准定位和替换复杂文档结构中的内容 |
| ClosedXML Excel 读取 | 多工作表支持、表头自动识别 |
| 配置持久化 | JSON 序列化 + 导入导出 |
| 全局异常处理 | 三级异常捕获 + 日志落盘 |
如果你也有类似的"Excel + Word 模板 → 批量生成文档"的需求,可以参考本文的思路来实现。
未来下一步希望能够做到word复杂表格的批量插入生成;以及翻页,如界址点成果表,家庭成员表,地块调查表等做到可以自定义配置。
如果本文对你有帮助,欢迎点赞、收藏、关注!有问题可以在评论区交流。