比对两个行式工作表的差异

该博客介绍了如何使用集算器脚本对比两个Excel表格(Sheet1和Sheet2)的差异,包括新增、删除和修改的数据。通过比对A列主键,计算出新增的(A6, AV6),删除的(A5, AV5)和修改的(A1, AV100)记录,最终分别写入新的sheet。这个过程涉及到记录的归并和集合运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例题描述和简单分析

文件data.xlsx有2个行式sheet,两者格式相同,A列都是逻辑主键,Sheet2的数据比Sheet1新。具体如下:

Sheet1:

AB
1A1AV1
2A2AV2
3A3AV3
4A4AV4
5A5AV5

Sheet2:

AB
1A1AV100
2A2AV2
3A3AV3
4A4AV4
5A6AV6

现在要找到sheet2和sheet1的差异,并分别写入新的sheet。其中sheet added存储所有新增的数据,即:

AB
1A6AV6

sheet removed存储所有删掉的数据,即:

AB
1A5AV5

sheet modified存储所有修改(主键不变,其他列变化)的记录,即:

AB
1A1AV100

上述算法涉及记录的归并和集合运算

解法及简要说明

编写下面的集算器脚本,并执行:

ABC
1=file("050/data.xlsx")
2=A1.xlsopen()
3=A2.xlsimport(;"Sheet1")=A2.xlsimport(;"Sheet2")
4=[B3,A3].merge@od(_1)=[A3,B3].merge@od(_1)=[[B3,A3].merge@od(), A4].merge@od()
5=A2.xlsexport(A4;"added")=A2.xlsexport(B4;"removed")=A2.xlsexport(C4;"modified")
6=A1.xlswrite(A2)

A1-B3,A5-C6:在Excel文件中读取/写入sheet。

A4:通过比对第1列,对B3和A3进行差集运算,从而算出新增的数据。函数merge实现归并运算,@o表示对内存数据进行不排序归并,@d表示归并中计算差集。

B4:算出删除的数据。

C4:先通过比对整行,算出新增或修改的数据。再将该中间结果与A4比对整行,算出修改的数据。由于第二步比对的是同一个序表中的数据,因此可以直接用集合差集进行计算,即:=[B3,A3].merge@od() \ A4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值