做电商自动化,Excel是绕不开的。采集的数据要存、清洗的数据要处理、多店铺的数据要汇总——到最后你会发现,流程大部分时间不是在跟网页打交道,而是在跟表格打交道。
我刚做自动化的时候,觉得Excel操作很简单——不就是“写入单元格”嘛。结果越做越发现坑多:数据量大了写入慢、循环遍历Excel效率低、多表协同搞不清楚逻辑、去重和清洗折腾半天。今天就把Excel表格处理这个模块完整讲一遍。
Excel操作的三个核心指令
影刀RPA的Excel操作指令都在右侧指令面板的“Excel/表格”分类下。最常用的有三个:
| 指令名称 | 功能 | 适用场景 |
|---------|------|---------|
| 打开Excel | 打开一个Excel文件,返回表格对象 | 所有Excel操作的前提 |
| 读取/写入行数据 | 读取或写入一整行数据 | 批量数据导入导出 |
| 保存/关闭Excel | 保存更改并关闭文件 | 所有操作结束后必须执行 |
一个容易忽略的点:所有Excel操作都依赖一个“表格对象”变量。你打开Excel的时候,影刀会返回一个类似$Excel对象的东西,后续所有读写指令都要用到这个对象。如果打开的时候没有保存这个返回值,后面的指令都用不了。
打开Excel的三种方式
在“打开Excel”指令里,打开方式有三个下拉选项:
方式一:按路径打开
最常用。直接指定文件路径,比如
C:\数据\商品列表.xlsx。注意路径里的反斜杠要写两个(\\),或者用正斜杠(/)。社区版用户注意:这个操作会计入运行时长。
方式二:使用已有Excel 如果你手动打开了Excel,可以用这个方式直接连接已经打开的表格。优点是快,不额外计时。但有个坑:你必须确保Excel没有被其他程序占用(比如你手动打开了正在编辑),否则会报“文件被占用”的错误。
方式三:新建Excel 创建一个新的Excel文件。适合从零开始生成报表的场景。
批量写入数据:用“写入行数据”而非“写入单元格”
很多人刚上手的时候喜欢用“写入单元格”一个一个写——数据量小的时候没问题,但一旦数据多了(比如几百上千条),速度会慢得让你怀疑人生。
正确做法:用“写入行数据”或“写入表格数据”批量写入。
逐行写入的模板
# 打开Excel
打开Excel 文件路径:C:\采集数据\商品列表.xlsx → $商品表
# 准备表头
写入行数据:表格对象=$商品表,行号=1,数据=[“商品名称”,“价格”,“销量”,“状态”]
# 循环写入数据
设置 $行号 = 2
ForEach $商品列表:
写入行数据:表格对象=$商品表,行号=$行号,数据=[$商品名,$价格,$销量,$状态]
$行号 = $行号 + 1
结束
# 保存并关闭
保存Excel:$商品表
关闭Excel:$商品表
一个关键区别:“写入行数据”是一次写入一整行,比“写入单元格”快得多。如果数据量大(超过500行),建议用“写入表格数据”一次性写入整个二维数组,速度还能再快几倍。
二维数组一次性写入

# 构建二维数组(所有数据)
设置 $所有数据 = []
$所有数据.追加([“商品名称”,“价格”,“销量”,“状态”]) # 表头
ForEach $商品列表:
$行数据 = [$商品名,$价格,$销量,$状态]
$所有数据.追加($行数据)
结束
# 一次性写入
写入表格数据:表格对象=$商品表,起始行=1,数据=$所有数据
这才是批量写入的最优解。几千条数据也是一次写入,速度飞快。
从Excel读取数据:循环遍历的两种方式
读取数据最常用的是“读取行数据”指令,配合循环遍历每一行。
方式一:For次数循环 + 读取行数据
# 先确定总行数
获取表格总行数 → $总行数
# 从第2行开始读(第1行是表头)
For次数循环 起始值=2 结束值=$总行数 递增值=1:
读取行数据 行号=当前值 → $行数据
# $行数据是一个列表,用下标取具体字段
$商品名 = $行数据[0]
$价格 = $行数据[1]
$销量 = $行数据[2]
结束
方式二:用“读取表格数据”一次性读取所有数据
数据量不大时(几百行以内) ,直接用“读取表格数据”一次性把整个表格读成一个二维数组,然后用ForEach遍历。
# 一次性读取所有数据
读取表格数据 → $所有数据
# 跳过第一行(表头),从第二行开始遍历
For $i = 1; $i < $所有数据.长度; $i++:
$行数据 = $所有数据[$i]
$商品名 = $行数据[0]
处理数据...
结束
两种方式的本质区别:
- 方式一:每次读取一行,适合大文件,内存占用小
- 方式二:一次性读取全部,速度快但内存占用大
我自己的经验:2000行以内用方式二,超过2000行用方式一。
Excel数据去重的三种方法
采集数据经常会有重复——同一件商品在不同页面被抓了两次、同一个订单号被录入了多遍。去重是数据清洗的第一步。
方法一:用“条件判断”在写入前去重
最直接的方法。每次写入前检查一下这条数据是不是已经在表格里了。
# 读取已有数据列表
读取列数据(商品名称列)→ $已有商品列表
ForEach $待写入数据:
如果 $待写入数据[0] 不在 $已有商品列表 中
写入行数据:$待写入数据
# 否则跳过,不写入
结束
这个方法的局限:数据量大了之后,每次都要遍历整个已有列表,速度会越来越慢。
方法二:写入后统一去重(推荐)
先把所有数据都写进去,最后统一去重。影刀有一个指令叫“删除重复行”,在指令面板搜索“重复”就能找到。
# 全部写入完成后,统一去重
删除重复行:表格对象=$表,列索引=0(按第1列去重)
保存Excel
注意:这个指令是按整行去重还是按指定列去重?在指令详情面板的“去重依据列”参数里可以选。默认是按整行完全匹配去重。
方法三:用Python做高级去重(适合复杂场景)
如果去重逻辑比较复杂(比如按多列组合去重、模糊匹配去重),可以结合Python代码来做。影刀的“Python脚本”指令可以跟Excel对象互通。
# 用Pandas去重
# 输入:$Excel对象(已打开的表格)
# 输出:去重后的数据,写回原表格
import pandas as pd
# 从影刀变量获取表格数据
df = pd.DataFrame($表格数据)
# 按‘商品名称’和‘价格’两列组合去重,保留第一次出现的
df.drop_duplicates(subset=['商品名称', '价格'], keep='first', inplace=True)
# 返回去重后的数据
$去重后数据 = df.values.tolist()
多表协同:从多个Excel读取汇总
电商自动化经常遇到这种情况:多个店铺的数据分别存在不同的Excel文件里,需要汇总到一张总表。
思路很简单:
- 分别打开每个Excel文件
- 读取数据
- 合并到一个总表
- 保存总表
# 设置三个店铺的文件路径
$店铺1路径 = “C:\数据\店铺A.xlsx”
$店铺2路径 = “C:\数据\店铺B.xlsx”
$店铺3路径 = “C:\数据\店铺C.xlsx”
# 创建总表
新建Excel → $总表
写入行数据:表头 [“店铺”,“商品名称”,“价格”,“销量”]
# 循环处理每个店铺
$店铺列表 = [“店铺A”,“店铺B”,“店铺C”]
ForEach $店铺名 in $店铺列表:
打开Excel:对应店铺路径 → $子表
读取表格数据 → $子表数据
关闭Excel:$子表
# 添加店铺名列,合并到总表
ForEach $行 in $子表数据:
$新行 = [$店铺名] + $行 # 前面加一列店铺名
写入行数据到总表
结束
结束
保存总表
一个关键注意:每个子表读取完后要及时关闭,不然文件被占用,下次再打开会报错。
数据清洗常用操作
采集回来的数据通常很“脏”——价格带了“¥”符号、销量带了“件”字、日期格式不统一。这些在Excel里手工处理很麻烦,用影刀结合Python脚本可以一键处理。
常用清洗操作:
- 去除特殊字符:价格里的
¥、$,数字里的逗号 - 转换数据类型:文本转数字、日期格式化
- 拆分合并列:把“颜色-尺寸”拆成两列,或把两列合并成一列
- 填充空值:缺失的数据用默认值填充
# 清洗价格数据:去掉‘¥’符号,转为数字
# 输入:$原始价格(文本),输出:$清洗后价格(数字)
import re
price_str = $原始价格
# 去掉所有非数字和小数点的字符
clean = re.sub(r'[^0-9.]', '', price_str)
if clean:
$清洗后价格 = float(clean)
else:
$清洗后价格 = 0
五个常见错误速查
| 错误现象 | 根本原因 | 修复方法 |
|---|---|---|
| “文件被占用”报错 | Excel文件被手动打开或上一个流程没关闭 | 确保文件未被其他程序打开,流程结束加“关闭Excel” |
| 写入数据不生效 | 写入后忘了保存 | 每次写入操作后执行“保存Excel” |
| 读取的数据为空 | 读取了空行或行号不对 | 检查行号是否从1开始,用“获取表格总行数”确认 |
| 循环写入越来越慢 | 每次写入都触发Excel重算 | 改成“写入表格数据”一次性写入 |
| 数据格式变了(日期变数字) | Excel自动转换格式 | 写入前把数据转为文本格式,或设置单元格格式 |
| 社区版运行超时 | 数据量大,写入操作耗时久 | 优化写入方式,或升级创业版 |
推荐资源
- 影刀官方文档:搜索“Excel”,有完整的指令说明和示例
- 推荐Excel插件Kutools,做复杂表格处理时可以配合使用
#影刀RPA #RPA自动化 #Excel处理 #数据采集 #数据清洗 #电商自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“子流程设计与模块化开发规范”。
