影刀RPA新手教程:按条件拆分表格——一个文件变多个分表
运营部每个月给我的总表里混着五个店铺的数据,要按店铺拆成五个分表分给五个对接人。以前的做法是Excel筛选、复制、粘贴、另存,一套下来二十分钟,月底做汇总的时候要来三遍。学会影刀RPA之后,这个活儿变成拖几个指令、点一次运行,两万行大表十几秒拆完。
按条件拆分表格,是新手学影刀RPA时最能立刻兑现价值的一个项目:不需要网页自动化、不需要Python,全流程只用读取、循环、判断、写入这几样基础指令。这篇就带你从零做出一个"一个文件变多个分表"的拆表机器人,每一步精确到配置哪个按钮、填哪个参数。
我是非技术出身,影刀RPA实操两年多,第一次写拆表流程时踩的坑也一并分享给你,文末有速查表。
拆分思路先行——先把逻辑想清楚再拖指令
拆表的本质是三步:**读入全部数据 → 按条件分组 → 每组写成一个文件。**对应到影刀RPA的指令链路就是:
- 【打开/新建Excel】打开总表,得到Excel对象
- 【读取Excel内容】读取方式选"已使用区域内容",整表读成二维列表
- 按某一列的值分组(比如B列店铺名),每组存进各自的二维列表
- 循环每个分组:【打开/新建Excel】新建文件 →【写入内容至Excel工作表】写入 →【关闭Excel】
拆成多个Sheet页还是拆成多个文件,取决于你要交付什么。拆Sheet页用【添加Sheet页】+循环写入;拆独立文件就是每个分组走一遍"新建-写入-关闭"。两条路我都会讲,先讲拆文件这条主线路。
这里提前说一个理解上的关键点:【读取Excel内容】读出来的区域内容是二维列表类型,也就是说你手里拿到的已经不是"Excel"了,是一个内存里的列表。分组操作全在列表上做,Excel对象只在读和写两头出现。理解了这一点,后面所有指令的参数你都不会懵。
读取与分组——用循环加If把数据分堆
先读数据:【读取Excel内容】的读取方式下拉选"已使用区域内容",Excel对象选第一步的变量,结果保存到变量"全部数据"。注意勾不勾"读取单元格显示的内容"的区别:默认情况下整数会被读成小数(1读成1.0),日期值会读成日期对象,勾选后返回的是你眼睛看到的内容——拆表这种场景我建议勾上,省掉一堆类型换算。
分组用两种打法,按数据量选:
打法一:循环加If(直观,新手首选)
# 指令:【ForEach列表循环】循环 全部数据,跳过第一行表头(从第2项开始)# 循环体:# 指令:【If条件判断】条件 item[1] == "店铺A" # 第2列是店铺名,下标从0数# 成立分支 → 指令:【添加列表项】把 item 加进 列表A# 否则分支 → 【If】item[1] == "店铺B" → 加进 列表B# ……店铺多就继续嵌套# 店铺超过三五个,嵌套If会写到你怀疑人生,换打法二打法二:字典分组(推荐,店铺数不固定也能跑)
# 指令:【插入代码段(Python)】输入 全部数据(二维列表)# 输出 分组结果(字典:店铺名 → 该店的二维列表)defmain(args):data=args.get('全部数据')header=data[0]# 第一行是表头,单独存groups={}# 分组字典forrowindata[1:]:# 从第二行开始遍历数据行key=str(row[1])# 第2列做分组键,转字符串防类型坑ifkeynotingroups:groups[key]=[header]# 每个分表都带上表头groups[key].append(row)returngroups字典是影刀RPA变量类型里最该早学的一个:键放分组条件,值放该组的行列表。第一次做的时候我用店铺名做键,结果总表里有些行末尾带了个看不见的空格,"店铺A"和"店铺A "成了两个组,拆出来多了一个只有三行的分表。后来养成了先清洗再分组的习惯,读进来的文本统一清掉前后空格。
写出分表——三个指令的精确配置
分组完成后,循环字典的每个键值对,逐个生成分表:
- 【打开/新建Excel】:启动方式选"新建Excel",路径填 D:\拆分结果\店铺A.xlsx(文件名用循环项的键拼出来),驱动方式选自动检测或openpyxl,是否可视化取消勾选——批量写文件不需要你看着
- 【写入内容至Excel工作表】:Excel对象选新建的那个变量,写入范围选"区域",从单元格A1开始,写入方式选覆盖,写入内容直接放该组的二维列表变量。这里有个参数必须认识:“格式设置为文本的列”,订单号这类纯数字长文本一定要在这里把列号填进去(多列用英文逗号分隔),否则科学计数法能把订单号全毁掉
- 【关闭Excel】:关闭并保存,一个分表落盘
如果想拆成同一个文件里的多个Sheet页,链路换成:【打开/新建Excel】打开总表 → 循环分组 →【添加Sheet页】指令,Sheet页名称填循环键,添加方式选"作为最后一个sheet页" →【写入内容至Excel工作表】时Sheet页名称参数填同名 →【关闭Excel】。配套的【重命名Sheet页】【删除Sheet页】【拷贝Sheet页】(支持当前工作簿内拷贝或拷贝到另外的工作簿)也在同一个指令集里,做"模板Sheet+填充数据"的套路时拷贝Sheet页很好用。
数据量大到几万行、又不想碰Python的话,还有一条纯指令路线:【数据表格导入】把Excel导进内存表 →【循环数据表格内容】循环方式选循环行 → 按行判断分发到多个数据表格 → 每个表【数据表格导出】成一个文件。内存表写入比反复开关Excel快得多,这是我最常用的提速手段。
元素定位四合一——拆完的表总要送出去
拆分表格本身用不到定位,但拆完的数据往往要传到系统里,这套基本功早晚要用,一次讲全。影刀RPA的定位四件套:元素捕获(点"捕获元素"按钮,鼠标移过去出现橙色边框后点击确认)、XPath六种写法、CSS选择器八种语法、正则表达式三个场景(抽数字、抢单号、清洗文本)。
# 捕获元素:上传分表的文件选择框(input框) //input[@type="file"] # 捕获元素:店铺下拉选项(用文本模糊匹配) //*[contains(text(),'店铺A')] # CSS选择器:等价于上面的id定位 #shop-select选型一句话:**属性唯一用CSS,要文本匹配或层级参照用XPath。**上传文件框这种页面元素,先"等待元素出现"再操作,是网页自动化里保稳定的第一纪律。
变量与流程控制——拆表流程的骨架
这个项目把变量三兄弟全用上了:列表(行数据)、字典(分组)、字符串(路径拼接)。流程控制的标准骨架:
- ForEach列表循环:遍历分组字典的键
- For次数循环:按行数分批写入,避免一次写两万行卡界面
- While条件循环:配合【读取Excel总行数】变量控制处理进度
- If条件判断:分组条件的核心
- Try-Catch:包住每个分表的写入段,单个分表失败不影响其他分表,Catch里【打印日志】记下失败的店铺名
Try-Catch是新手最容易忽略的一环。我有次拆表跑到第4个店铺时文件被同事打开占用,整个流程中断,前3个白拆。加上Try-Catch之后,被占用的会记进失败清单,流程结束后我可以一键重试失败项,稳定性完全不是一个量级。
数据处理与进阶协同——拆完之后的自动流转
分表落盘只是开始,进阶链路把流程推到全自动:【HTTP请求】把分表上传到内部系统接口;Python协同用Pandas在拆分前先做数据清洗和透视,比如顺手算好每个店铺的日汇总行插在表尾;OCR识别应对截图版表格;ADB手机自动化处理只有APP能看到的报表数据。系统联动层面,【发送飞书消息】把分表文件发到对应的店铺群、邮件自动投递给对接人、定时任务挂每月1号凌晨自动跑——从此拆表这件事在你的待办里彻底消失。
平台实战里的同款逻辑:小红书多账号数据按账号拆分、拼多多多店铺商品表按店铺拆分,用的都是这一套"读入-字典分组-循环写出"的骨架,只是分组键和数据源不同。
工程化规范与调试技巧
拆表流程做成模板只需三步:分组键的列号做成流程参数(输入参数"分组列号",默认1)、输出目录做成参数、店铺清单从配置表读取。以后任何"按X列拆表"的需求,改个参数就能交付。
调试三板斧:断点单步执行看每组数据对不对、变量面板盯字典的键有没有多出来的"脏键"、【打印日志】在每个分表落盘后输出文件路径和行数。运行前在日志里输出"本次共拆出N个分表",和分组字典长度对得上才算闭环。版本选择:社区版每天30分钟时长跑小表没问题,两万行级的定时任务建议创业版。
易错速查表
| 现象 | 原因 | 解法 |
|---|---|---|
| 拆出来多了几个奇怪分表 | 分组键带空格或类型不一 | 先清洗文本,键统一转字符串 |
| 订单号变科学计数法 | 写入时被当数字 | "格式设置为文本的列"填列号 |
| 文件打开报错被占用 | 对接人提前打开了文件 | Try-Catch捕获,失败清单重试 |
| 循环删除行导致漏行 | 删除后行号前移 | 倒序循环或标记后统一删 |
| 表头写进了数据区 | 分组时没带表头也没单独写 | 每组第一行插入header |
学习资源与延伸阅读
完整拆表流程的源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,字典分组脚本和模板化参数都封装好了,改成你的列号和路径就能跑。新手建议同时把影刀学院"Excel自动化"章节过一遍,【读取Excel内容】【写入内容至Excel工作表】两条指令的官方文档里都带了可照抄的示例流程。
#影刀RPA #RPA自动化 #表格处理 #Excel #循环操作
作者:林焱