采集了一堆数据,最后卡在存Excel这一步。行写错了、列对不齐、追加变成了覆盖、清空把表头也删了。
影刀的Excel指令覆盖了完整操作: 读取区域、写入行、追加行、清空工作表。掌握这四个,就能搞定90%的表格处理。
指令1:读取Excel数据——把表格变成变量
场景:读取关键词列表批量搜索、读取商品ID批量采集。
核心指令:
打开Excel(先打开文件)
读取区域数据(返回二维列表)读取列数据到列表(返回一维列表)关闭Excel(用完关掉)
操作步骤:
- 拖入
打开Excel,选择文件路径(支持变量) - 拖入
读取区域数据 - 设置起始行/列、结束行/列
- 输出到列表变量
- 拖入
关闭Excel
配置示例(读取关键词列):
打开Excel:
- 文件路径:C:\商品列表.xlsx

- 可见性:不可见(省资源)
读取列数据到列表:
- 工作表:Sheet1
- 列号:A(或填1)

- 起始行号:2(跳过表头)
- 输出列表:${关键词列表}
关闭Excel
⚠️ 踩坑:读完Excel一定要关闭Excel,否则下次运行时文件被占用,报“文件正在使用”。
指令2:写入行数据——从第1行开始填
场景:采集结果实时写入,每采集一条写一行。
核心指令:
写入行数据到表格(指定行号写入)获取Excel行数(拿到已有行数,决定下一行写哪)
操作步骤:
- 打开Excel
- 用
获取Excel行数得到当前最后一行行号 - 新行号 = 最后行号 + 1
写入行数据到表格,行号填新行号
示例(写入采集结果):
# 假设已打开Excel,工作表Sheet1
获取Excel行数 → ${当前行数}
设置变量(新行号 = ${当前行数} + 1)
写入行数据到表格:
- 工作表:Sheet1

- 起始行号:${新行号}
- 起始列号:A(或1)
- 行数据:["鼠标垫", "¥49", "月销1000"]
# 行数据是一个列表,按顺序写入A、B、C列
写表头(第一次运行时):
# 先判断是否需要写表头
获取Excel行数 → ${行数}
如果 ${行数} == 0:
写入行数据到表格(行号=1, 行数据=["商品名","价格","销量"])
⚠️ 踩坑:写入行数据到表格的“行号”参数,如果填的数字对应的行已经有数据,会覆盖原来的内容,不是追加。所以一定要用“最后一行+1”的方式计算新行号。
指令3:追加行——不用算行号,自动加到底部
场景:批量采集时不断加行,不想手动算行号。
核心指令:追加行到表格
操作方法:
- 一行代码搞定,不需要
获取行数和行号+1
示例:
追加行到表格:
- 工作表:Sheet1
- 行数据:["影刀鼠标垫", "¥49", "月销1000"]
效果:不管当前表格有多少行,新数据会写在最后一行的下面。
追加多行:
# 循环列表,每一条追加一行
列表循环(${采集结果列表}):
当前商品 = 当前项
追加行到表格(行数据=[当前商品.标题, 当前商品.价格])
对比写入vs追加:
| 操作 | 需要自己算行号 | 是否会覆盖 | 适用场景 |
|---|---|---|---|
写入行数据 | ✅ 需要 | 指定行号会覆盖 | 修改指定行、写入固定位置 |
追加行 | ❌ 不需要 | 不会覆盖 | 持续写入新数据(推荐) |
✅ 推荐:日常采集用追加行,省心不出错。
指令4:清空工作表——不是删文件
场景:每次运行前清空旧数据,重新采集。
核心指令:
清除单元格区域(清空指定区域内容)删除行(整行删除)
清空整个工作表(保留表头):
# 获取最后一行号
获取Excel行数 → ${最后行号}
# 如果数据行>1(假设第1行是表头)
如果 ${最后行号} > 1:
删除行:
- 工作表:Sheet1
- 起始行号:2
- 结束行号:${最后行号}
清空全部内容(连表头也清):
清除单元格区域:
- 工作表:Sheet1
- 起始单元格:A1
- 结束单元格:根据最大列和行号确定
⚠️ 踩坑:清除单元格区域只清内容,不删行。下次写入会从清空的行开始,可能留下空白行。推荐用删除行彻底移除。
实战:完整的采集→写入流程
# B_主流程
# 1. 初始化Excel
调用子流程(D_初始化采集表)
# 2. 采集循环
列表循环(${关键词列表}):
调用子流程(C_搜索采集, 输入参数=${当前关键词})
# 采集结果存到变量${单条数据}
# 3. 追加写入
调用子流程(D_追加数据, 输入参数=${单条数据})
# 4. 关闭Excel
关闭Excel
---
# D_初始化采集表子流程
打开Excel(路径="C:\采集结果.xlsx", 可见性=不可见)
# 检查是否需要写表头
获取Excel行数 → ${行数}
如果 ${行数} == 0:
追加行到表格(行数据=["关键词", "标题", "价格", "采集时间"])
# 不清空旧数据,保留历史。如果要清空,在这里加清空逻辑
---
# D_追加数据子流程
流程参数:
- 输入:数据列表(如["鼠标垫","¥49"])
追加行到表格(行数据=${数据列表})
Excel指令速查表
| 需求 | 指令名称 | 关键参数 | 注意事项 |
|---|---|---|---|
| 打开文件 | 打开Excel | 文件路径、可见性 | 用完记得关闭 |
| 关闭文件 | 关闭Excel | 无 | 不关会占用文件 |
| 读取区域 | 读取区域数据 | 起始行列、结束行列 | 返回二维列表 |
| 读取列 | 读取列数据到列表 | 列号、起始行 | 返回一维列表 |
| 写入行 | 写入行数据到表格 | 行号、行数据 | 会覆盖 |
| 追加行 | 追加行到表格 | 行数据 | 自动底部新增 |
| 获取行数 | 获取Excel行数 | 工作表名 | 0表示空表 |
| 删除行 | 删除行 | 起始/结束行号 | 整行删除 |
| 清除内容 | 清除单元格区域 | 区域范围 | 只清内容不删行 |
| 保存 | 保存Excel | 无 | 关闭前自动保存 |
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 报错“文件被占用” | 上次运行没关闭Excel | 手动关掉Excel,流程里加关闭Excel |
| 追加行写到了第10000行 | 表格下面有看不见的空行 | 先删除所有空行;或用获取行数检查 |
| 写入的中文变乱码 | Excel编码问题 | 文件格式用.xlsx,不要用.xls |
| 读取区域返回空列表 | 区域设置错了 | 检查起始行/列是否大于实际范围 |
| 写入速度越来越慢 | 每写一行都打开关闭Excel | 循环外打开一次,循环内只追加,循环完关闭 |
| 读取数字变成文本 | Excel单元格格式问题 | 在影刀里用转换成数字指令处理 |
性能优化:大数量写入
采集1万条数据,每写一行都打开关闭Excel,耗时极长。
优化方案:批量写入
# 先在内存里攒够100条
设置变量(缓存列表 = [])
循环采集:
把单条数据加入缓存列表
如果 缓存列表.长度 >= 100:
批量写入(缓存列表)
清空缓存列表
# 最后写入剩余不足100条的
如果 缓存列表.长度 > 0:
批量写入(缓存列表)
# 批量写入子流程
对于每行数据 in 缓存列表:
追加行到表格(行数据=每行数据)
实测:1万条数据,逐行写入约3分钟,批量写入(100条一批)约40秒。
版本差异
- 社区版:Excel指令完全可用,无限制
- 创业版:支持更多格式(.csv、.xlsm)
- 注意:大文件(超过50MB)读取会慢,建议先拆分成小文件
推荐资源:影刀官方示例库搜“Excel批量读写”,有现成的“关键词批量搜索+结果写入”模板,直接改路径就能用。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
