当前位置: 首页 > news >正文

用 Python 写了个小工具:让 Excel 数据自动填充 Word 模板

用 Python 写了个小工具:让 Excel 数据自动填充 Word 模板

最近被重复性的文档填写工作搞烦了。

每次要给客户发合同、证书、通知书之类的文件,内容差不多,就是名字、日期、金额不一样。手改吧,10份以内还能忍;100份就开始心态爆炸了。

所以写了个小工具,专门干这件事:Excel 数据 + Word 模板 = 一键批量生成 Word 文档


痛点场景

你有没有遇到过这种情况:

  • 100 份录取通知书,就名字不一样
  • 50 份合同,金额、日期不同
  • 节日给客户发批量邮件,附件要是个性化 PDF

手改改到怀疑人生,复制粘贴改名字改到吐。

我之前也是这么干的。直到某天忍无可忍,决定写个工具解放自己。


解决方案

思路很简单:

  1. Excel 放数据,每行一条记录
  2. Word 模板里用{{字段名}}占位
  3. 程序自动替换,生成 N 个文件

Word 模板示例:

您好,{{姓名}}! 您的订单 {{订单号}} 已确认, 将于 {{日期}} 送达 {{地址}}。

Excel 表头对应:

姓名订单号日期地址
张三A0012026-04-01北京市朝阳区

运行之后,自动生成张三.docx,内容里所有{{姓名}}都替换成"张三"。


核心代码

用到的库就两个:openpyxl读 Excel,python-docx操作 Word。

占位符替换逻辑

defreplace_placeholders(doc,data_dict):"""替换 Word 里的 {{字段名}}"""replaced_count=0# 段落 + 表格都要处理forparagraphindoc.paragraphs:forruninparagraph.runs:if'{{'inrun.textand'}}'inrun.text:forkey,valueindata_dict.items():placeholder='{{'+key+'}}'ifplaceholderinrun.text:run.text=run.text.replace(placeholder,str(value))replaced_count+=1# 表格里的占位符也要替换fortableindoc.tables:forrowintable.rows:forcellinrow.cells:forparagraphincell.paragraphs:forruninparagraph.runs:if'{{'inrun.textand'}}'inrun.text:forkey,valueindata_dict.items():placeholder='{{'+key+'}}'ifplaceholderinrun.text:run.text=run.text.replace(placeholder,str(value))replaced_count+=1returnreplaced_count

批量生成

forrow_numinrange(2,ws.max_row+1):# 读取 Excel 行数据data=read_excel_row(ws,row_num)# 加载模板new_doc=Document(template_path)# 替换占位符replace_placeholders(new_doc,data)# 生成文件名(优先用姓名/标题)filename=generate_filename(data,row_num)# 保存new_doc.save(os.path.join(output_folder,filename))

使用方式

命令行

python excel-to-word-template.py data.xlsx template.docx output/

交互模式

不加参数直接运行,会弹出文件选择对话框:

python excel-to-word-template.py

这个功能依赖 tkinter,如果没装会降级成手动输入路径。算是兜底方案吧。


踩过的坑

坑1:日期格式乱了

Excel 里的日期类型,直接读出来是个数字(比如45456)。处理方式是判断是否有strftime方法,有就转换:

ifhasattr(value,'strftime'):value=value.strftime('%Y-%m-%d')

坑2:文件名冲突

如果两条数据姓名一样,后面的会覆盖前面的。加了个自动编号:

ifos.path.exists(output_path):name,ext=os.path.splitext(filename)counter=1whileos.path.exists(output_path):output_path=os.path.join(output_folder,f"{name}_{counter}{ext}")counter+=1

坑3:字段名对不上

模板里写了{{姓名}},Excel 表头是{{用户名称}},结果生成的文件全是占位符。所以加了匹配检查:

matched_fields=[fforfintemplate_fieldsiffinheaders]print(f"✅ 字段匹配:{len(matched_fields)}/{len(template_fields)}")

不匹配会警告,但不会中断执行——毕竟有些模板字段可能就是用来放空的。


效果展示

处理 100 份文件,大概 3-5 秒(主要看 Word 模板复不复杂)。

🚀 开始生成 Word 文件... ✅ [1/100] 张三.docx ✅ [2/100] 李四.docx ✅ [3/100] 王五.docx ... 🎉 完成!成功生成 100 个 Word 文件 📁 输出目录: output

写在最后

这个小工具没什么高大上的技术,就是解决实际问题。

如果你也被重复性文档工作困扰,不妨试试。代码开源在 GitHub,拿去随便用。

项目地址:
https://github.com/Remy0328/excel-to-word-generator

依赖:

pipinstallopenpyxl python-docx

有改进建议欢迎评论区交流。

http://www.jsqmd.com/news/608113/

相关文章:

  • 2026年深圳性价比高的荣威4S店分析:荣威科莱威试驾预约怎么选 - myqiye
  • 破解智慧驿站痛点:智慧驿站厂家远亭WISE方法论如何实现双碳落地? - 速递信息
  • 15款降AI率工具实测:SpeedAI稳坐首选宝座
  • 2026年电子签章服务商哪家好,高评价品牌盘点 - 工业推荐榜
  • 共模电感在EMI滤波中的实战应用与设计技巧
  • QMCDecode:重获音乐文件控制权的本地化解密方案
  • 老旧设备系统升级:开源系统补丁工具技术赋能指南
  • PostgreSQL 技术日报 (4月8日)|PG 内核开发新看点
  • 别再死记命令了!拆解eNSP企业网项目:VRRP+MSTP如何实现负载均衡与故障切换?
  • 2026年全国靠谱的电子印章开发公司盘点,哪家性价比更高 - mypinpai
  • 2026年智能客服哪个好用?实用功能强操作简单软件盘点 - 品牌2026
  • 太阳能模拟器_AAA 级太阳光模拟系统_材料老化测试设备
  • 2026年房屋租赁电子签选购攻略,靠谱品牌一览 - myqiye
  • 瑞祥商联卡回收教程,快速变现超简单! - 团团收购物卡回收
  • FPGA测频原理深度解析:从“数周期”到“等精度”,哪种方法更适合你的项目?
  • 命名惰性:在亚马逊,为何“技术突破”敌不过“认知突破”
  • 为什么dex-method-counts是Android开发必备工具?
  • 别再傻傻分不清了!用Python+pgmpy库5分钟搞懂贝叶斯网络和马尔科夫网络的区别
  • 探讨广州、深圳靠谱的柴油机消防泵企业,选购时如何选择 - 工业设备
  • WuliArt Qwen-Image Turbo部署教程:NVIDIA驱动/CUDA/cuDNN版本兼容性清单
  • 如何抓住智能包装行业的发展趋势?
  • 2026室内地图生成工具推荐:高效绘制空间地图的实用软件 - 品牌2025
  • 2026大学生雅思机构权威排名|专治基础差、无自制力,高效出分指南 - 速递信息
  • 2026年漳州恒业咨询性价比排名,剖析恒业咨询发展方向如何 - 工业品牌热点
  • Zotero PDF Translate:打破学术语言壁垒的20+翻译引擎一站式解决方案
  • 品牌延伸的终局:为何亚马逊上“爆款同名新品”注定败给“独立专家品牌”
  • 支付宝立减金套装回收避坑指南:安全到账只看这三点 - 圆圆收
  • PMP证书到底有什么用?考证后没含金量?真相扎心但实用
  • 别乱改!OpenHarmony系统参数权限(DAC/SELinux)避坑指南与安全配置
  • 2026年自动化运维怎么选?四款主流产品核心能力大比拼!