行式 Excel 文件比对
两个Excel文件,有多列数据,第一行是列名,第二行开始是数据记录,要对两个文件中关键列的内容进行比对。处理此问题可以把文件读成数据集,取出关键列的记录值组成一个集合,然后通过两个集合的运算得出结果。
有2018、2019年的销售订单表order_2018.xlsx和order_2019.xlsx,两文件有相同的列结构,部分数据如下所示:
1. 找相同
把两个文件中关键列值相同的都找出来。
示例:请找出这两年都购买了同一种产品的用户CustomerId和产品ProductId,记录在c_p.txt文件中。
esProc SPL脚本如下:
A |
|
1 |
=T("e:/orders/order_2018.xlsx";CustomerId,ProductId) |
2 |
=T("e:/orders/order_2019.xlsx";CustomerId,ProductId) |
3 |
=[A1,A2].merge@io() |
4 |
=T("e:/orders/c_p.xlsx",A3) |
A1 读出order_2018.xlsx的关键列CustomerId,ProductId数据
A2 读出order_2019.xlsx的关键列CustomerId,ProductId数据
A3 对两年数据进行归并,@i表示返回共同包含的记录
A4 将A3中的结果写入c_p.xlsx中
2. 找不同
示例1:找出2019年新增客户的订单情况,保存在文件new_c.xlsx中, esProc SPL脚本如下:
A |
|
1 |
=T("e:/orders/order_2018.xlsx") |
2 |
=T("e:/orders/order_2019.xlsx") |
3 |
=A2.id(CustomerId)\A1.id(CustomerId) |
4 |
=A2.select(A3.contain(CustomerId)) |
5 |
=T("e:/orders/new_c.xlsx",A4) |
A1 读出order_2018.xlsx的数据
A2 读出order_2019.xlsx的数据
A3 用2019年所有客户Id减去2018年的,得到新增的客户Id
A4 从2019年订单表筛选出新增客户的订单
A5 将A4中的结果写入new_c.xlsx中
示例2:找出2019年所有流失的客户Id,保存在文件lost_c.xlsx中, esProc SPL脚本如下:
A |
|
1 |
=T("e:/orders/order_2018.xlsx") |
2 |
=T("e:/orders/order_2019.xlsx") |
3 |
=A1.id(CustomerId)\A2.id(CustomerId) |
4 |
=file("e:/orders/lost_c.xlsx").xlsexport(A3) |
A1 读出order_2018.xlsx的数据
A2 读出order_2019.xlsx的数据
A3 用2018年所有客户Id减去2019年的,得到流失的客户Id
A4 将A3中的结果写入lost_c.xlsx中,因为A3中的结果是序列,不是序表,所以这里不能用T函数来保存数据
英文版