如何对比两个 Excel 的不同
例题描述
有通讯录address.xlsx,Sheet1中是早期的,Sheet2是新一期的,如下图所示:
现在需要比较两期的通讯录,分别求出新增的、删除的、修改的记录保存到Sheet Added、Deleted、Changes中,如下图所示:
实现步骤
1、 运行集算器
可去润乾官网下载职场版,同时下载一个免费授权就够了,首次运行时会提示加载。
2、 编写脚本:
(1)新增的
把代码列出来看得清楚点:
A |
|
1 |
=file("E:/txl/address.xlsx") |
2 |
=A1.xlsimport@t(;"Sheet1").keys(ID) |
3 |
=A1.xlsimport@t(;"Sheet2").keys(ID) |
4 |
=[A3,A2].merge@d(ID) |
5 |
=A1.xlsexport@ta(A4;"Added") |
A1 定义数据文件address.xlsx
A2 读出Sheet1中的数据,选项@t表示首行是列标题,然后将ID设为主键
A3 读出Sheet2中的数据,选项@t表示首行是列标题,然后将ID设为主键
A4 选项@d表示从A3中去掉A2中ID相同的记录,即是新增的
A5 将新增的保存到Sheet Added中
(2)删除的
编写代码如下:
A |
|
1 |
=file("E:/txl/address.xlsx") |
2 |
=A1.xlsimport@t(;"Sheet1").keys(ID) |
3 |
=A1.xlsimport@t(;"Sheet2").keys(ID) |
4 |
=[A2,A3].merge@d(ID) |
5 |
=A1.xlsexport@ta(A4;"Deleted") |
A4 选项@d表示从A2中去掉A3中ID相同的记录,即是删除的
A5 将删除的保存到Sheet Deleted中
(3)修改的
编写代码如下:
A |
|
1 |
=file("E:/txl/address.xlsx") |
2 |
=A1.xlsimport@t(;"Sheet1").keys(ID) |
3 |
=A1.xlsimport@t(;"Sheet2").keys(ID) |
4 |
=join(A2:old,ID;A3:new,ID) |
5 |
=A4.select(old.array()!=new.array()).conj(new) |
6 |
=A1.xlsexport@ta(A5.switch(ID);"Changes") |
A4 将A2、A3根据主键连接,得到两期中有相同ID的记录,连接后的新列名分别为old、new
A5 从A4中选出两期的所有列值序列不相等的,得到有修改的记录。然后把new列的记录合并为新的数据集,即是A3中有修改的记录
A6 将修改的记录取消连接后保存到Sheet Changes中
3、 按F9运行程序,运行结束后打开address.xlsx可以看到新生成的Sheet Added、Deleted和Changes。
【附件】 address.zip