影刀RPA Word模板自动填写:批量生成合同报告

📅 2026/7/11 12:31:22 👁️ 阅读次数 📝 编程学习
影刀RPA Word模板自动填写:批量生成合同报告

title: “影刀RPA Word模板自动填写:批量生成合同报告”
date: 2026-07-01
author: 林焱

影刀RPA Word模板自动填写:批量生成合同报告

HR每月要生成200份员工劳动合同,财务每周要输出50份项目报告,这类"格式固定、只有数据不同"的文档,用影刀配合python-docx模板引擎可以10分钟批量搞定。

什么情况用什么

适合批量生成Word的场景:

  • 劳动合同、录用通知书,每人一份
  • 销售报价单、项目合同,每单一份
  • 周报月报,格式固定只换数据
  • 证书、荣誉奖状批量生成

不适合的场景:

  • 文档格式每次都不一样,需要人工排版
  • 内容逻辑复杂,需要人工判断写什么

怎么做

方法1:使用python-docx直接操作(推荐)

拼多多店群自动化上架方案

先手工做好Word模板,用特殊占位符标记变量位置,影刀批量替换。

第一步:制作Word模板

在Word里把需要替换的位置用双花括号标记,例如:

甲方:{{company_name}} 乙方:{{employee_name}} 入职日期:{{start_date}} 月薪:{{salary}} 元

第二步:准备数据源(Excel)

employee_namecompany_namestart_datesalary
张三示例科技有限公司2024年7月1日8000
李四示例科技有限公司2024年7月1日10000

【影刀操作】

  1. 新建流程「批量生成合同」
  2. 添加【读取Excel】指令
    • 文件路径:C:\员工数据\员工列表.xlsx
    • 工作表:Sheet1
    • 保存结果:变量employees
  3. 添加【循环】指令,遍历变量employees
    • 循环变量:employee
  4. 在循环内添加【Python】指令
    fromdocximportDocumentimportcopy# 读取模板doc=Document(r'C:\模板\合同模板.docx')# 替换变量replacements={'{{employee_name}}':employee['employee_name'],'{{company_name}}':employee['company_name'],'{{start_date}}':employee['start_date'],'{{salary}}':str(employee['salary'])}# 替换段落中的文本forparaindoc.paragraphs:forkey,valueinreplacements.items():ifkeyinpara.text:forruninpara.runs:run.text=run.text.replace(key,value)# 替换表格中的文本fortableindoc.tables:forrowintable.rows:forcellinrow.cells:forparaincell.paragraphs:forkey,valueinreplacements.items():ifkeyinpara.text:forruninpara.runs:run.text=run.text.replace(key,value)# 保存到以员工名字命名的文件output_path=f"C:\\合同输出\\{employee['employee_name']}_劳动合同.docx"doc.save(output_path)print(f"已生成:{output_path}")
  5. 循环结束后添加【写入日志】:共生成 {员工总数} 份合同

方法2:使用docxtpl模板引擎(更强大)

docxtpl支持Jinja2语法,可以在模板里写条件判断和循环,更灵活。

模板写法(支持条件):

{{employee_name}} 同志: 您的岗位为:{{position}} {% if is_probation %} 试用期:3个月,试用期薪资:{{trial_salary}}元 {% endif %} 月薪:{{salary}} 元

【影刀操作】

  1. 添加【Python】指令
    fromdocxtplimportDocxTemplate tpl=DocxTemplate(r'C:\模板\合同模板_tpl.docx')context={'employee_name':employee['employee_name'],'position':employee['position'],'salary':employee['salary'],![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d3997665cd704a57b3f0f07825617209.png#pic_center)'is_probation':employee['is_probation']=='是','trial_salary':employee['trial_salary']}tpl.render(context)output_path=f"C:\\合同输出\\{employee['employee_name']}_合同.docx"tpl.save(output_path)

方法3:生成Word后转PDF

合同通常要发PDF,生成Word后自动转换。

【影刀操作】

  1. 在保存Word后添加【Python】指令
    importsubprocessimportos# 用LibreOffice转PDF(需要安装LibreOffice)word_path=f"C:\\合同输出\\{employee['employee_name']}_劳动合同.docx"output_dir=r'C:\合同输出\PDF'os.makedirs(output_dir,exist_ok=True)result=subprocess.run([r'C:\Program Files\LibreOffice\program\soffice.exe','--headless','--convert-to','pdf','--outdir',output_dir,word_path],capture_output=True,text=True)ifresult.returncode==0:print(f'PDF转换成功')else:print(f'PDF转换失败:{result.stderr}')

有什么坑

坑1:替换后格式丢失

原模板里"员工姓名"是加粗红色,替换后变成普通黑字。

TEMU店群如何管理运营?

原因:Word会把一个段落拆成多个run,占位符被拆开了,比如{{name}}被分成{{name}}三个run,单独替换每个run的text找不到完整占位符。

解决方法:先把段落所有run的text合并,找到占位符位置后,清空所有run的text,只在第一个run里写入替换后的完整文本。或者用docxtpl,它内部处理了这个问题。

坑2:表格里的内容替换不了

只替换了段落文本,忘了遍历表格。模板里如果变量在表格单元格里,必须单独遍历doc.tables

坑3:中文乱码

保存路径或数据里有中文,在某些系统上会乱码。

解决方法:打开文件时统一指定encoding='utf-8',路径用原始字符串r''

坑4:日期格式不统一

Excel里的日期是2024-07-01,合同里要求2024年7月1日

解决方法:在Python里做格式转换:

fromdatetimeimportdatetime date_str=datetime.strptime(employee['start_date'],'%Y-%m-%d').strftime('%Y年%-m月%-d日')

总结

Word批量生成的核心是:设计好模板、准备好数据、写好替换逻辑。docxtpl比直接用python-docx省事很多,遇到格式复杂的模板首选它。100份合同用影刀跑,3分钟搞定。