当前位置:首页>python>Python 办公:一键按模板生成 100 个 Word 文档

Python 办公:一键按模板生成 100 个 Word 文档

  • 2026-09-10 14:05:57
Python 办公:一键按模板生成 100 个 Word 文档

Python 办公:一键按模板生成 100 个 Word 文档

通知、合同、录取通知书、工资条……格式一模一样,只有名字/金额不同。
用一份 Word 模板 + 一张数据表,批量生成 100 份,几分钟的事。

一、思路

  1. 1. 做一份 模板.docx,把会变动的地方写成占位符:{{姓名}}、{{部门}}、{{金额}}。
  2. 2. 准备一张 数据表.xlsx(或 csv),每行一个人,列名 = 占位符名。
  3. 3. 循环每行:复制模板 → 把占位符替换成真实值 → 另存为「姓名.docx」。
  4. 4. 批量导出到文件夹。

二、核心代码

import pandas as pd
from docx import Document

data = pd.read_excel("名单.xlsx")          # 列:姓名/部门/金额
tpl = Document("模板.docx")

for _, row in data.iterrows():
    doc = Document("模板.docx")            # 每次重新打开,避免污染
# 替换正文段落
for p in doc.paragraphs:
for col in data.columns:
iff"{{{{{col}}}}}"in p.text:
                p.text = p.text.replace(f"{{{{{col}}}}}", str(row[col]))
# 替换表格内文字
for tbl in doc.tables:
for cells in tbl.rows:
for cell in cells.cells:
for col in data.columns:
iff"{{{{{col}}}}}"in cell.text:
                        cell.text = cell.text.replace(f"{{{{{col}}}}}", str(row[col]))
    doc.save(f"output/{row['姓名']}.docx")
print("生成完成")

三、占位符规范

建议统一用双花括号 {{列名}},和普通文字区分开,不容易误替换。
模板里写:尊敬的 {{姓名}} 同学:,数据表列名就叫 姓名。

四、常见坑

  • • 每次循环重新 Document("模板.docx"),不要复用同一个对象,否则上次替换会残留。
  • • 占位符拆成两段({{ 和 姓名 }} 之间换行)会匹配不到,模板里占位符要连着写。
  • • 数字金额建议 str(row[col]) 前 round 并格式化,如 f"{row['金额']:.2f}"。
  • • 中文乱码:python-docx 写 docx 本身不乱码,注意数据表用 utf-8-sig 读 csv。

五、装依赖

pip install python-docx pandas openpyxl

六、配套工具怎么用

打开 main.py:

  1. 1. 选模板 .docx(含 {{列名}} 占位符)。
  2. 2. 选数据表 .xlsx(列名对应占位符)。
  3. 3. 自动识别占位符并校验数据表是否齐全。
  4. 4. 批量生成到 output 文件夹,显示进度。

100 份合同,点一下就好。

最新文章

随机文章