行式 Excel 文件比对

 

两个Excel文件,有多列数据,第一行是列名,第二行开始是数据记录,要对两个文件中关键列的内容进行比对。处理此问题可以把文件读成数据集,取出关键列的记录值组成一个集合,然后通过两个集合的运算得出结果。

20182019年的销售订单表order_2018.xlsxorder_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函数来保存数据