影刀RPA零基础教程:Excel表格数据处理从入门到实战(含去重模板)

做电商自动化,Excel是绕不开的。采集的数据要存、清洗的数据要处理、多店铺的数据要汇总——到最后你会发现,流程大部分时间不是在跟网页打交道,而是在跟表格打交道

picture.image 我刚做自动化的时候,觉得Excel操作很简单——不就是“写入单元格”嘛。结果越做越发现坑多:数据量大了写入慢、循环遍历Excel效率低、多表协同搞不清楚逻辑、去重和清洗折腾半天。今天就把Excel表格处理这个模块完整讲一遍。

Excel操作的三个核心指令

picture.image

影刀RPA的Excel操作指令都在右侧指令面板的“Excel/表格”分类下。最常用的有三个:

| 指令名称 | 功能 | 适用场景 |

picture.image |---------|------|---------| | 打开Excel | 打开一个Excel文件,返回表格对象 | 所有Excel操作的前提 | | 读取/写入行数据 | 读取或写入一整行数据 | 批量数据导入导出 | | 保存/关闭Excel | 保存更改并关闭文件 | 所有操作结束后必须执行 |

picture.image

一个容易忽略的点:所有Excel操作都依赖一个“表格对象”变量。你打开Excel的时候,影刀会返回一个类似$Excel对象的东西,后续所有读写指令都要用到这个对象。如果打开的时候没有保存这个返回值,后面的指令都用不了。

打开Excel的三种方式

picture.image

在“打开Excel”指令里,打开方式有三个下拉选项:

方式一:按路径打开

picture.image 最常用。直接指定文件路径,比如C:\数据\商品列表.xlsx。注意路径里的反斜杠要写两个(\\),或者用正斜杠(/)。社区版用户注意:这个操作会计入运行时长。

方式二:使用已有Excel 如果你手动打开了Excel,可以用这个方式直接连接已经打开的表格。优点是快,不额外计时。但有个坑:你必须确保Excel没有被其他程序占用(比如你手动打开了正在编辑),否则会报“文件被占用”的错误。

picture.image

方式三:新建Excel 创建一个新的Excel文件。适合从零开始生成报表的场景。

picture.image

批量写入数据:用“写入行数据”而非“写入单元格”

很多人刚上手的时候喜欢用“写入单元格”一个一个写——数据量小的时候没问题,但一旦数据多了(比如几百上千条),速度会慢得让你怀疑人生

picture.image 正确做法:用“写入行数据”或“写入表格数据”批量写入

逐行写入的模板

# 打开Excel
打开Excel 文件路径:C:\采集数据\商品列表.xlsx → $商品表

# 准备表头
写入行数据:表格对象=$商品表,行号=1,数据=[“商品名称”,“价格”,“销量”,“状态”]

# 循环写入数据
设置 $行号 = 2
ForEach $商品列表:
    写入行数据:表格对象=$商品表,行号=$行号,数据=[$商品名,$价格,$销量,$状态]
    $行号 = $行号 + 1
结束

# 保存并关闭
保存Excel$商品表
关闭Excel$商品表

一个关键区别:“写入行数据”是一次写入一整行,比“写入单元格”快得多。如果数据量大(超过500行),建议用“写入表格数据”一次性写入整个二维数组,速度还能再快几倍。

二维数组一次性写入


![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/541985e7b8134330b772e6a19ddd3f41~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783151456&x-signature=BgroeHFkveSEveFQ6CtlcD6Lolc%3D)
# 构建二维数组(所有数据)
设置 $所有数据 = []
$所有数据.追加([“商品名称”,“价格”,“销量”,“状态”])  # 表头

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文件里,需要汇总到一张总表。

思路很简单:

  1. 分别打开每个Excel文件
  2. 读取数据
  3. 合并到一个总表
  4. 保存总表
# 设置三个店铺的文件路径
$店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学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“子流程设计与模块化开发规范”。

0
0
0
0
评论
未登录
暂无评论