一、背景与思路

背景:由于新冠肺炎疫情的影响,每天需要统计公司员工的信息进行上报,并和前一天的数据进行比对。肉眼一个个的比对比较累,而且容易出错,所以就想到通过程序来实现数据的比对。

思路:

1、通过xlrd、xlsxwriter这类模块进行表格读取,读取后,根据姓名或者手机号进行逐个单元格比对,发现值不对的,进行标记输出;

2、通过pandas进行数据列的合并和比对,如果发现值不一致的进行标记,最后输出为excel格式, 这里同样需要到索引列。

最终实现的效果如下:

excel-diff
excel-diff

二、使用方式

出于效果的考虑,这里选择了pandas进行数据进行处理,见上面的效果图,我们选择了手机号作为索引列,数据值相等的列,只会保留一个值,数据值不等的会通过高亮把两张表前后的值输出显示。注意这里大小写是敏感的,就像x86运维这个值之所以高亮显示就是因为两者的x值大小写不同。同时其中一个表存在的数据,另一个表中不存在也会在后面的sheet页进行单独列出。

打包成exe后,在windows下执行效果如下:

python-excel-diff-exe
python-excel-diff-exe

这里我特意截图了一个报错的内容出来,出现上面ValueError: Shape of passed values is (38, 25), indices imply (38, 23) 报错,是因为在23和25行使用了同样的手机号,注意,这里最开始已经说了要求,索引列要求唯不通是重复的,不然出现重复值时,数据列就不知道该和另一表格中的哪一行的数据进行合并了。有人说我的索引列就是有重复值怎么办?可以使用多列进行索引,比如两列进行索引,比如姓名+手机号,这样多列就可以确保唯一值。

另外比对的时候,还要注意标题行的值一定要一样的,不然程序也不知道两张表的哪些列应该比对。

如果需要该文中的程序的,可以进行出售,不要源码的打包程序(可适用windows、linux、mac平台)88元授权使用。捐赠所得会用于本站主机托管费用。需要源码的,可以通过本站联系方式进行洽谈。