欢迎光临
我们一直在努力

影刀RPA实操指南:多张Excel表格自动合并与数据去重

影刀RPA实操指南:多张Excel表格自动合并与数据去重

五个店铺各导出一张订单表,月底合并成总表时要一张张复制粘贴,贴完还要肉眼查重,一干就是两小时,错一行对账就崩。这个问题我踩了半年坑,最后用影刀RPA写成了一个"文件夹丢进去、总表自动出"的流程,现在合并去重只要一分钟。

这篇实操指南专门讲多表合并与去重:影刀RPA怎么循环读文件夹里的所有Excel、怎么把多张表的数据拼在一起、怎么按订单号去掉重复行,每一步精确到指令和参数,代码块可以直接抄。

合并去重的核心思路一句话说清:**把每张表读成二维列表 → 拼成一个大列表 → 按关键列去重 → 整块写入总表。**全程不需要打开Excel界面,纯后台跑,比手工快两个数量级。

合并前的准备:文件管理与文件夹循环

在这里插入图片描述

先搭框架:左侧指令面板搜"获取文件夹中的文件列表",在右侧详情面板填入文件夹路径(比如 D:\\店铺导出\\),勾选包含子文件夹按需选择,结果保存到变量 file_list,得到一个文件路径列表。

接着拖入ForEach列表循环,循环项就叫 file,循环体里放读取和拼接的逻辑。这里用到了文件处理的基础能力:影刀RPA的【获取文件列表】【复制文件】【删除文件】这类指令,合并前顺手把文件按日期归档,文件夹才不会越来越乱。

结构长这样:

  • 获取文件夹中的文件列表 → file_list
  • ForEach循环 file_list
  • 循环体:【打开/新建Excel】读当前文件 → 读取区域 → 存入 all_data
  • 循环结束:【二维列表按列去重】→ 写入总表
  • 读取与拼接:Excel读写指令的批量用法

    循环体内部,用【打开/新建Excel】打开循环项 file,注意用完立刻【关闭Excel】再处理下一个文件,不关的话循环到第五个文件就会进程堆积报错,这是我实测出来的教训。
    在这里插入图片描述

    然后用【读取区域】把数据读出来。这里有个新手必踩的坑:**表头每一张表都有,直接拼会把表头也当成数据重复五遍。**两个方案:一是起始单元格从 A2 开始读,跳过表头;二是第一张表连表头读,后面的从 A2 读。

    读出来的数据存进同一个变量 all_data,用【列表追加】指令把每张表的数据接到一起。拼接过程用变量思维理解:all_data 是一个二维列表(列表套列表),每张表贡献若干行,行是一个个一维列表。

    如果愿意用Python写,等价逻辑更直观:

    from xbot import excel

    def main(args):
    all_data = [] # 存放所有店铺数据的总列表
    files = ['D:\\\\店铺导出\\\\店A.xlsx', 'D:\\\\店铺导出\\\\店B.xlsx']

    for f in files:
    workbook = excel.open(f, kind='office', visible=False)
    worksheet = workbook.get_active_sheet()
    # 从第2行读到末尾,跳过表头
    rows = worksheet.get_range(2, 'A', 9999, 'H')
    all_data += rows # 拼接进总列表
    workbook.close() # 每张表用完立即关闭

    print(f'合并后共 {len(all_data)} 行')

    输入是多张店铺表,输出是合并后的总列表。visible=False 是后台模式,批量处理时看不到表格动作,速度也更快。

    去重核心:列表去重与二维列表按列去重

    数据拼完就该去重了。影刀RPA有两个现成指令,按数据形态选:

    在这里插入图片描述

    • 【列表去重】:一维列表用,比如一列订单号、一批URL,直接删掉重复项
    • 【二维列表按列去重】:表格数据用,指定按哪一列去重,该列值相同的行只保留第一行

    订单表是二维结构,用【二维列表按列去重】:输入合并后的 all_data,列索引填 0(按第一列订单号去重,索引从0开始算)。指令会直接在原列表上操作,把订单号相同的重复行删掉,只留最早出现的那一行。

    **这里藏着一个关键决策点:重复行留哪一条?**指令保留第一行,所以列表顺序就是去重结果。我的做法是循环店铺文件时按导出时间从新到旧排序,这样重复订单留下的永远是最新数据。之前没注意这点,老订单把新订单盖了,退款状态全是过期的,对账差了两千多块。

    如果去重逻辑更复杂(比如要留金额最大的一条),用Python处理:

    # 输入:all_data 合并后的二维列表;输出:去重后的二维列表
    seen = {} # 用字典记录每个订单号的最佳行
    for row in all_data:
    order_id = row[0]
    if order_id not in seen or row[2] > seen[order_id][2]:
    # 同一订单号,保留金额更大的那条
    seen[order_id] = row
    result = list(seen.values())

    去重完成后,用【写入区域】把结果从 A1 开始写入总表,再用【关闭Excel】保存。整个流程到此闭环。

    在这里插入图片描述

    变量与流程控制回顾:合并流程的骨架

    把上面的骨架捋一遍,正好把流程控制三个件都用上了:

    指令角色关键参数
    获取文件夹中的文件列表 数据入口 路径+保存到file_list
    ForEach列表循环 批量骨架 循环项file
    If条件判断 过滤 跳过临时文件如~$开头
    Try-Catch异常处理 兜底 单个文件坏了不中断全局

    If这里有个实用细节:Excel打开时会产生 ~$ 开头的临时文件,被循环抓进去就会报错,循环体开头加一个"如果文件名以~$开头就跳过本次循环"的判断,能省掉很多莫名报错。

    元素定位与网页采集:让数据自动进文件夹

    合并的上游是数据采集。平台后台的导出表可以自动化下载:用影刀RPA的元素捕获抓"导出"按钮,点顶部工具栏"捕获元素"出现橙色边框点击确认,再配【下载文件】指令存到统一文件夹。
    在这里插入图片描述

    元素抓不到就手写定位。XPath和CSS怎么选:层级深、要按文本找的用XPath,比如 //*[contains(text(),‘导出订单’)];结构规整的用CSS,如 button.export-btn。 XPath胜在能配合函数,CSS胜在写起来短,我个人的习惯是先试CSS,不行再写XPath。

    从网页上抠数据时再配正则:【从文本中提取内容】指令,比如从"共1,523条订单"里用 \\d+ 抽数字,用来判断导出是否完整。

    进阶技能、系统联动与工程化

    合并流程稳定后可以再加三层:

    • 进阶技能:数据量大时用Python的pandas做合并去重,几万行也是秒级
    • 系统联动:合并完成后【发送飞书消息】报告"本月合并5张表、12,340行、去重删除812行",或者用邮件发送指令把总表发给同事
    • 工程化规范:拆成三个子流程——01_读取合并、02_按列去重、03_写入归档,主流程只做调度;命名用编号前缀,调试时右键打断点逐段排查
    • 定时任务:在"我的应用"里给流程配每天23点自动跑,白天导出的表晚上自动合好

    平台实战上,淘宝、拼多多、TEMU多个店铺的订单导出都能做成自动采集,配合这套合并流程就是完整的店群对账方案。鼠标键盘图像自动化在导出场景用得少,但遇到Flash控件的老后台,图像点击是唯一解,【等待图像出现】加【点击图像】保底。

    合并去重易错速查表

    在这里插入图片描述

    现象/报错原因解决
    总表里表头重复N遍 每张表都连表头读了 第二张表起从A2开始读
    去重后数据不是最新的 保留了列表中靠前的旧行 循环顺序按时间从新到旧排
    循环到一半报文件占用 Excel对象没关闭就开下一个 每张表读完立即【关闭Excel】
    列表去重没效果 对二维列表用了一维去重指令 改用【二维列表按列去重】
    循环抓到~$临时文件 表格文件处于打开状态 If判断文件名跳过~$开头

    第二条是我付出过真实代价的:去重指令明明正常,是我没控制列表顺序,重复订单留了旧状态,第一次发现时已经入库三天。

    学习资源与延伸阅读

    【列表去重】和【二维列表按列去重】两条指令在官方文档里都有带数据的完整示例,建议照着官方例子跑一遍再上真数据,影刀学院的视频课里也有列表处理专题。

    这套"多店铺订单合并去重"流程的完整源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,把文件夹路径和去重的列索引换成你自己的业务字段就行。

    #影刀RPA #RPA自动化 #Excel #数据去重 #表格处理

    在这里插入图片描述

    作者:林焱

    赞(0)
    未经允许不得转载:171主机测评 » 影刀RPA实操指南:多张Excel表格自动合并与数据去重
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址