如何对比两个 Excel 的不同

 

例题描述

有通讯录address.xlsxSheet1中是早期的,Sheet2是新一期的,如下图所示:

..

..

现在需要比较两期的通讯录,分别求出新增的、删除的、修改的记录保存到Sheet AddedDeletedChanges中,如下图所示:

..

..

..

 

实现步骤

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中去掉A2ID相同的记录,即是新增的

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中去掉A3ID相同的记录,即是删除的

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   A2A3根据主键连接,得到两期中有相同ID的记录,连接后的新列名分别为oldnew

A5   A4中选出两期的所有列值序列不相等的,得到有修改的记录。然后把new列的记录合并为新的数据集,即是A3中有修改的记录

A6   将修改的记录取消连接后保存到Sheet Changes

   

3、  F9运行程序,运行结束后打开address.xlsx可以看到新生成的Sheet AddedDeletedChanges

 

 

【附件】 address.zip