影刀RPA实操指南:电商订单自动对账与差异标记
做电商的都知道,月底对账是噩梦。
平台后台导出的订单数据,要跟自己的 ERP 或表格里的数据对一遍,看看金额对不对、有没有退款、有没有异常订单。以前手动对账要半天,RPA 可以把这变成 5 分钟的事。

这篇文章给一套完整的对账自动化方案。
一、对账的本质------两个数据源的差集比对
对账的逻辑其实就一句话:
我有两份订单数据,找出不一致的地方。

展开就是三个问题:
- 哪些订单平台有、我这边没有?
- 金额对得上吗?
- 退款/售后状态一致吗?
拼多多店群自动化报活动上架!

二、数据准备------统一两边的格式
对账的第一步不是写逻辑,是让两边数据能"对齐"。
| 平台后台导出的字段 | 你自己的数据字段 | 对齐后的统一字段 |
|---|---|---|
| 订单编号 | 订单ID | 订单号 |
| 实付金额(元) | 结算金额 | 金额 |
| 订单状态 | 状态 | 状态 |
| 售后状态 | 退款状态 | 售后 |
python
import pandas as pd
# 1. 读取两边数据
平台数据 = pd.read_excel(r"D:\对账\拼多多导出订单.xlsx")
内部数据 = pd.read_excel(r"D:\对账\ERP订单数据.xlsx")
# 2. 统一列名
平台数据 = 平台数据.rename(columns={
"订单编号": "订单号",
"实付金额(元)": "金额",
"订单状态": "状态"
})
内部数据 = 内部数据.rename(columns={
"订单ID": "订单号",

"结算金额": "金额"
})
# 3. 统一金额格式(有的带¥有的不带)
平台数据["金额"] = 平台数据["金额"].astype(str).str.replace("¥", "").str.replace("¥", "").astype(float)
内部数据["金额"] = 内部数据["金额"].astype(float)
# 4. 去空格和不可见字符
平台数据["订单号"] = 平台数据["订单号"].astype(str).str.strip()
内部数据["订单号"] = 内部数据["订单号"].astype(str).str.strip()
print(f"平台数据:{len(平台数据)}条 | 内部数据:{len(内部数据)}条")
三、三步对账法
第一步:找缺失订单
python
# 平台有,内部没有 → 可能漏录入了
平台独有 = 平台数据[~平台数据["订单号"].isin(内部数据["订单号"])]
# 内部有,平台没有 → 可能是测试订单或已删除
内部独有 = 内部数据[~内部数据["订单号"].isin(平台数据["订单号"])]
print(f"平台独有(漏录入):{len(平台独有)}条")
print(f"内部独有(多出的):{len(内部独有)}条")
第二步:核对金额

python
# 合并两张表,按订单号对齐
合并 = pd.merge(平台数据, 内部数据, on="订单号", how="inner", suffixes=("_平台", "_内部"))
# 计算金额差
合并["金额差"] = abs(合并["金额_平台"] - 合并["金额_内部"])
# 找出金额不一致的
金额差异 = 合并[合并["金额差"] > 0.01] # 0.01元以内的算系统误差,忽略
print(f"金额不一致:{len(金额差异)}条")
if len(金额差异) > 0:
print(金额差异[["订单号", "金额_平台", "金额_内部", "金额差"]].head(10))
第三步:标记结果
python
# 给每条订单打标记
def classify_order(row):
"""判断订单对账状态"""
订单号 = row["订单号"]
if 订单号 in 平台独有["订单号"].values:
return "漏录入"
if 订单号 in 内部独有["订单号"].values:
return "多出"
if 订单号 in 金额差异["订单号"].values:
差 = 金额差异[金额差异["订单号"] == 订单号]["金额差"].values[0]
return f"金额差异{差:.2f}元"
return "正常"
平台数据["对账标记"] = 平台数据.apply(classify_order, axis=1)
# 统计
print(平台数据["对账标记"].value_counts())

四、生成对账报告
python
# 生成差异明细表
report_path = r"D:\对账\对账报告_20260609.xlsx"
with pd.ExcelWriter(report_path, engine="openpyxl") as writer:
# Sheet1: 汇总统计
汇总 = pd.DataFrame({
"项目": ["平台总订单", "内部总订单", "正常匹配", "漏录入", "多出", "金额差异"],
"数量": [
len(平台数据),
len(内部数据),
len(平台数据[平台数据["对账标记"] == "正常"]),
len(平台独有),
len(内部独有),
len(金额差异)
]
})
汇总.to_excel(writer, sheet_name="汇总", index=False)
# Sheet2: 漏录入明细
平台独有.to_excel(writer, sheet_name="漏录入", index=False)
# Sheet3: 金额差异明细
金额差异.to_excel(writer, sheet_name="金额差异", index=False)
# Sheet4: 全部标记结果
平台数据.to_excel(writer, sheet_name="全部", index=False)
print(f"对账报告已生成:{report_path}")
五、发送对账通知

python
# 汇总成通知消息
total = len(平台数据)
正常 = len(平台数据[平台数据["对账标记"] == "正常"])
漏录入 = len(平台独有)
多出 = len(内部独有)
金额异 = len(金额差异)
msg = f"""
📊 今日订单对账报告
时间:{当前日期}
━━━━━━━━━━━━━━━
总订单:{total}条
✅ 正常:{正常}条 ({正常/total*100:.1f}%)
[video(video-l6TBmaFO-1781074524910)(type-csdn)(url-https://live.csdn.net/v/embed/526817)(image-https://v-blog.csdnimg.cn/asset/1d3c3709da119dd8c13ab01e9b282520/cover/Cover0.jpg)(title-TEMU店群矩阵自动化运营核价报活动)]
❌ 漏录入:{漏录入}条
➕ 多出:{多出}条
💰 金额差异:{金额异}条
━━━━━━━━━━━━━━━
详情见:{report_path}
"""
发送企业微信通知(webhook_url, msg)
如果 漏录入 > 0 或 金额异 > 0:
发送企业微信通知(webhook_url, "⚠️ 存在异常订单,请尽快处理!")
六、全自动化流程串联
把上述步骤用影刀串成一个完整流程:

A: 浏览器打开平台后台 → 导出订单Excel → 下载到本地
B: 读取平台数据和内部数据 → Pandas合并比对
C: 生成对账报告Excel
D: 发送企业微信通知
关键细节:
- 平台导出文件名通常带时间戳,需要先获取下载文件夹里最新的
.xlsx文件 - 对账周期参数化,输入"2026-06-01"到"2026-06-09",方便按不同周期对账
- 如果漏录入很多(超过10%),大概率是数据源有问题,加阈值告警

七、常见坑
金额精度问题 :浮点数对比别用 ==,用 abs(a-b) < 0.01 容忍 1 分钱误差。
订单号重复 :两边数据可能都有重复订单号(比如同一个订单的多个子单),先 drop_duplicates 或者按订单号+商品ID联合去重。
Excel 大文件性能:订单过万条时 Pandas 处理没问题,但写 Excel 会慢,可以只输出差异数据,全量数据存 CSV。

平台导出按钮不固定 :后台页面动不动就改版,导出按钮的 XPath 建议用文本匹配 //button[contains(text(),'导出')] 或 //span[contains(text(),'下载报表')]。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。