影刀RPA Word模板自动填写:批量生成合同报告
title: “影刀RPA Word模板自动填写批量生成合同报告”date: 2026-07-01author: 林焱影刀RPA Word模板自动填写批量生成合同报告HR每月要生成200份员工劳动合同财务每周要输出50份项目报告这类格式固定、只有数据不同的文档用影刀配合python-docx模板引擎可以10分钟批量搞定。什么情况用什么适合批量生成Word的场景劳动合同、录用通知书每人一份销售报价单、项目合同每单一份周报月报格式固定只换数据证书、荣誉奖状批量生成不适合的场景文档格式每次都不一样需要人工排版内容逻辑复杂需要人工判断写什么怎么做方法1使用python-docx直接操作推荐拼多多店群自动化上架方案先手工做好Word模板用特殊占位符标记变量位置影刀批量替换。第一步制作Word模板在Word里把需要替换的位置用双花括号标记例如甲方{{company_name}} 乙方{{employee_name}} 入职日期{{start_date}} 月薪{{salary}} 元第二步准备数据源Excelemployee_namecompany_namestart_datesalary张三示例科技有限公司2024年7月1日8000李四示例科技有限公司2024年7月1日10000【影刀操作】新建流程「批量生成合同」添加【读取Excel】指令文件路径C:\员工数据\员工列表.xlsx工作表Sheet1保存结果变量employees添加【循环】指令遍历变量employees循环变量employee在循环内添加【Python】指令fromdocximportDocumentimportcopy# 读取模板docDocument(rC:\模板\合同模板.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.textrun.text.replace(key,value)# 替换表格中的文本fortableindoc.tables:forrowintable.rows:forcellinrow.cells:forparaincell.paragraphs:forkey,valueinreplacements.items():ifkeyinpara.text:forruninpara.runs:run.textrun.text.replace(key,value)# 保存到以员工名字命名的文件output_pathfC:\\合同输出\\{employee[employee_name]}_劳动合同.docxdoc.save(output_path)print(f已生成{output_path})循环结束后添加【写入日志】共生成 {员工总数} 份合同方法2使用docxtpl模板引擎更强大docxtpl支持Jinja2语法可以在模板里写条件判断和循环更灵活。模板写法支持条件{{employee_name}} 同志 您的岗位为{{position}} {% if is_probation %} 试用期3个月试用期薪资{{trial_salary}}元 {% endif %} 月薪{{salary}} 元【影刀操作】添加【Python】指令fromdocxtplimportDocxTemplate tplDocxTemplate(rC:\模板\合同模板_tpl.docx)context{employee_name:employee[employee_name],position:employee[position],salary:employee[salary],is_probation:employee[is_probation]是,trial_salary:employee[trial_salary]}tpl.render(context)output_pathfC:\\合同输出\\{employee[employee_name]}_合同.docxtpl.save(output_path)方法3生成Word后转PDF合同通常要发PDF生成Word后自动转换。【影刀操作】在保存Word后添加【Python】指令importsubprocessimportos# 用LibreOffice转PDF需要安装LibreOfficeword_pathfC:\\合同输出\\{employee[employee_name]}_劳动合同.docxoutput_dirrC:\合同输出\PDFos.makedirs(output_dir,exist_okTrue)resultsubprocess.run([rC:\Program Files\LibreOffice\program\soffice.exe,--headless,--convert-to,pdf,--outdir,output_dir,word_path],capture_outputTrue,textTrue)ifresult.returncode0:print(fPDF转换成功)else:print(fPDF转换失败{result.stderr})有什么坑坑1替换后格式丢失原模板里员工姓名是加粗红色替换后变成普通黑字。TEMU店群如何管理运营原因Word会把一个段落拆成多个run占位符被拆开了比如{{name}}被分成{{、name、}}三个run单独替换每个run的text找不到完整占位符。解决方法先把段落所有run的text合并找到占位符位置后清空所有run的text只在第一个run里写入替换后的完整文本。或者用docxtpl它内部处理了这个问题。坑2表格里的内容替换不了只替换了段落文本忘了遍历表格。模板里如果变量在表格单元格里必须单独遍历doc.tables。坑3中文乱码保存路径或数据里有中文在某些系统上会乱码。解决方法打开文件时统一指定encodingutf-8路径用原始字符串r。坑4日期格式不统一Excel里的日期是2024-07-01合同里要求2024年7月1日。解决方法在Python里做格式转换fromdatetimeimportdatetime date_strdatetime.strptime(employee[start_date],%Y-%m-%d).strftime(%Y年%-m月%-d日)总结Word批量生成的核心是设计好模板、准备好数据、写好替换逻辑。docxtpl比直接用python-docx省事很多遇到格式复杂的模板首选它。100份合同用影刀跑3分钟搞定。