影刀RPA实操指南:Word批量生成合同与模板填充
月底要给三十家门店续签合同,改客户名、换金额、换日期,逐份打开Word手动改,一下午就耗进去了,改到第二十份还会串行。这篇文章讲怎么用影刀RPA把Word批量生成合同做成一键运行:Excel名单读进来,模板占位符自动替换,文件按客户名自动另存,顺带把表格、图片和PDF导出也一起批量化。
我是非技术出身,这套流程在公司跑了快两年,踩过的坑全部写在正文里。
先说结论:Word批量生成合同的核心就三个指令——【读取Excel内容】拿数据、【替换Word文本】填模板、【保存Word】出成品,剩下全是细节处理。
一、安装与环境准备:Word自动化跑起来的前提
影刀RPA在官网下载安装,第一次打开会引导安装浏览器插件,纯做Word自动化可以不装,但建议装上,后面涉及网页端合同系统会用到。界面分三块:左侧应用列表、中间流程画布、右侧指令面板,在指令面板搜"Word",就能看到【打开/新建Word】【替换Word文本】【写入文本至Word中】这一整组指令。
版本差异要先心里有数,这直接影响批量任务能不能一次跑完:
| 版本 | 运行时长 | 适合谁 |
|---|---|---|
| 社区版 | 每天30分钟 | 个人学习试用 |
| 创业版 | 无限制 | 小团队批量任务 |
| 企业版 | 无限制+集中管控 | 正式生产环境 |
批量生成合同一次跑几十份,社区版的30分钟大概率不够。我当年就是跑到第20份被掐断,还以为是流程坏了,排查半天才发现是版本限制,后来换的创业版。
还有一个开关容易漏:【打开/新建Word】指令里的"驱动方式"下拉,默认"自动检测",会按顺序检测office和WPS。如果你的电脑装的是WPS但默认打开方式被改过,就会报奇怪的错误,明确选WPS或office最稳。勾选"是否可视化"则方便调试时肉眼看到Word在动。
二、模板设计:占位符怎么定,替换才不出错
模板填充的第一步不是写流程,是改模板。把合同里所有要变的地方改成占位符,比如【客户名称】【合同金额】【签订日期】。用全角方括号【】而不是半角[],因为半角中括号在合同正文里可能本来就有,替换时会误伤。
占位符必须全文档唯一,且不能被拆散。这是我吃过最亏的坑:模板里写"甲方:【客户名称】公司",看起来没问题,但有人后期编辑时Word自动纠错在【和客户名称之间插了个空格,替换指令就再也找不到了。所以模板定稿后锁成只读,谁都不许动。
替换用【替换Word文本】指令,参数逐个说:
- Word对象:选【打开/新建Word】指令保存的那个变量
- 查找文本:填【客户名称】
- 替换为:填从Excel读出来的客户名变量
- 全部替换:必须勾选,不勾只替换光标后第一处
- 保存文本替换个数至:强烈建议保存,比如存成变量replace_count
replace_count这个变量别浪费,后面加一个If条件判断:如果替换个数为0,说明这份合同没替换成功,记入失败清单跳过,而不是生成一份带着占位符的废合同。我就因为没做这个校验,给客户发出去过一份印着【客户名称】字样的合同,社死程度自己体会。
三、数据源处理:把Excel名单读成流程能用的结构
数据源用【打开/新建Excel】打开名单表,第一行是表头(客户名称、合同金额、签订日期),下面每行一个客户。用【读取Excel内容】指令,读取方式选"已使用区域内容",读出来是二维列表——非技术同学记一下这个概念:二维列表就是"列表里面套列表",外层每一项是一行,行里的每一项是一个单元格。
【读取Excel内容】的返回类型是有明确规则的:单元格内容是字符串,行和列内容是一维列表,区域和已使用区域内容是二维列表。后面拼文件名、比对金额,全靠搞清楚手里拿到的是哪一种。
这个场景用得最多的变量类型就三种:
- 字符串:单元格读出来就是字符串,金额会变成"12800.0"这种带小数点的样子
- 列表:一维列表是一行数据,二维列表是整张表
- 字典:把表头和每行数据组合成字典,用data[“客户名称”]取值,比记下标data[0]可读性强得多,这是两年实操里最值得学的一个习惯
四、核心流程搭建:循环、判断、异常一个不能少
整体链路五步:
- 【打开/新建Excel】读取名单,存成二维列表变量
- ForEach列表循环,循环项是每一行客户数据
- 循环体内【打开/新建Word】打开合同模板(驱动方式选好,保存Word对象至变量)
- 依次执行多条【替换Word文本】,替换完【保存Word】按客户名另存
- 【关闭Word】关闭对象,进入下一轮循环
整个循环体建议拖进Try块里,Catch块放【输出日志】记录客户名和报错信息,Finally块放【关闭Word】。因为三十份合同里只要有一份文件被占用打不开,整个流程就断了;有异常处理之后,坏的跳过、好的继续,跑完看日志补那一份就行。这也是Try-Catch-Finally机制最典型的用法:Try放业务,Catch存错误,Finally做无论如何都要执行的清理。
另存文件名和金额格式用Python模式拼一下,日期格式化这种事让代码干比手工靠谱:
# 输入:row 是从Excel读出的一行数据(列表类型)# row[0]=客户名称 row[1]=合同金额 row[2]=签订日期importdatetime# Excel日期单元格读出来是日期对象,文本单元格读出来是"2026/9/1"字符串# 先判断类型再格式化成 20260901d=row[2]ifisinstance(d,datetime.datetime):date_str=d.strftime("%Y%m%d")else:date_str=str(d).split(" ")[0].replace("/","").replace("-","")# 拼出规范文件名:客户名称_合同_20260901.docxfile_name=f"{row[0]}_合同_{date_str}.docx"# 金额转千分位字符串,填进模板更正式:12,800.00amount=f"{float(row[1]):,.2f}"这里有个高频坑:同样是日期列,单元格格式是日期的读出来是日期对象,格式是文本的读出来是字符串,两种处理方式完全不同,所以代码里先判断isinstance再走不同分支。
五、进阶技巧:表格、图片、PDF导出一起批量做
合同里经常带付款明细表,用【插入Word表格】指令,表格数据参数要传二维列表,文档里明确写了这个参数需要点亮python模式再填,很多人卡在这一步就是因为直接在默认输入框里贴了文本。插入前勾"插入表格前换行",不然表格会怼在正文后面。
反向操作也有:【读取Word表格】指令,表格查找方式二选一——按表格位置(从1开始,超过表格数量返回错误)或按表格内容(返回第一个包含指定内容的表格,找不到返回None)。我用它做过"读取客户回填的合同表格、核对金额是否被改"的校验环节。
要盖电子章位图的用【插入图片】指令,图片来源选本地图片,图像缩放百分比设100,勾"插入图片前换行"。最后归档一步加【Word导出PDF】指令,导出范围选"所有页面",勾"如果文件存在则覆盖",PDF保存路径不存在会自动创建,不用提前建目录。
这些指令都出自影刀官方帮助中心的Word自动化专题,不是野路子。另外影刀客户端的应用市场里有现成的Word批量处理类模板应用,可以先获取一个拆开看别人怎么搭结构,再改成自己的业务,这比从零搭快得多。
六、元素定位四合一:Word流程里什么时候用到定位
做纯本地Word用不上元素定位,但两个场景一定用得上:合同数据来自网页系统(OA、CRM后台),或者要把生成好的合同传回网页端。这时候就是标准的网页自动化四件套——捕获元素、XPath、CSS选择器、正则表达式。
选型一句话说清:能捕获就先捕获(点顶部工具栏"捕获元素"按钮,目标上出现橙色边框后点击确认),捕获不稳定再手写XPath,CSS选择器适合class命名规整的页面,正则表达式只用来处理文本内容不做定位。XPath六种写法里,实战中最常用的是属性定位和contains模糊匹配:
# 精确属性定位:合同系统里的"下载合同"按钮 //button[@id="download-contract"] # 模糊匹配:按钮文案带空格或动态变化时用contains //*[contains(text(),'下载合同')] # 参照物定位:通过表头"客户名称"找同一行里的下载图标 //*[text()='客户名称']/../following-sibling::*[1]//a配合【获取元素对象(web)】指令,定位方式支持捕获元素、CSS选择器、XPath三种,还能设置"等待元素存在"的超时时间,网页慢的时候不会立刻报错。网页端批量下载合同模板后,接回本地的Word替换流程,就是我现在的完整链路。
七、工程化规范:子流程拆分与调试,跑得稳的关键
流程超过二十个指令就必须拆子流程,我的固定拆法是三块:
- 01_读取数据:Excel读取加数据清洗,输出二维列表
- 02_生成单份合同:传入一行数据,完成打开、替换、保存、关闭,输出成功或失败
- 03_收尾汇总:统计成功失败数量,发邮件通知
子流程之间用流程参数的输入输出传数据,别用全局变量硬传,两个流程同时跑会串数据。命名带编号前缀,指令面板里一眼能看出执行顺序。
调试就两招:右键指令选"添加断点",点运行后流程停在断点处,配合底部的变量面板看每轮循环项内容对不对;拿不准就单步执行一行一行过。我排查"第17份合同金额错误"那次,就是在替换金额那条指令前打断点,单步走了三遍,才发现Excel里那一行的金额是合并单元格,读出来是空值。
八、系统联动:跑完自动通知,定时自动运行
批量任务最怕"我以为跑完了其实没跑"。收尾子流程里加【发送邮件】指令,把成功清单和失败清单作为附件发给自己:收件人多个用英文分号隔开,SMTP服务器下拉选常用邮箱,勾选"使用SSL"和"SMTP服务器需要身份验证",身份验证处填授权码而不是邮箱登录密码,这是新手最容易卡的一步,163和QQ邮箱都需要先在邮箱设置里短信开通授权码。
再往上走一级就是完整闭环:影刀客户端里把应用设成定时任务,每月25号晚上自动生成下月合同,跑完邮件通知,人只在出现失败记录时介入。官方的"运行错误处理"设置里还能直接配邮件、钉钉群、飞书群通知,应用一报错自动推送Webhook消息,不用自己写一行通知代码。
九、易错速查表:Word自动化高频问题对照
| 报错或现象 | 原因 | 解决方法 |
|---|---|---|
| 替换个数永远是0 | 模板占位符被改(混入空格、全半角不一致) | 模板定稿锁定,占位符统一全角【】 |
| 流程卡死或对象丢失 | Word对象用完没有关闭 | 每个打开配对【关闭Word】,放进Finally块 |
| 金额读出来是12800.0 | 单元格被读成数字字符串 | Python转格式,或读取时勾"读取单元格显示的内容" |
| 跑到一半停止 | 社区版每天30分钟限制 | 升级创业版或企业版,或拆分任务多次跑 |
| 第二轮循环打开报错 | 上一轮Word对象未释放 | 关闭指令移入Finally,保证异常时也执行 |
| 写入表格报格式错误 | 表格数据没点亮python模式 | 在表格数据参数处切换Python输入再传二维列表 |
十、学习资源与延伸阅读
入门先看两条官方线:影刀帮助中心的Word自动化指令文档(每个指令的参数说明都在里面),以及影刀学院的【影刀RPA专题教程】Word自动化视频课。数据清洗拿不准的,用魔法指令选"数据处理"场景,把需求用大白话描述一遍就能生成处理指令,生成后源码可见、完全可控,跑错了还有"智能修复"兜底。
这套Word批量生成合同的完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,换成你自己的模板和名单字段就能跑。
#影刀RPA #RPA自动化 #Word批量生成 #合同模板填充 #Excel数据处理
作者:林焱