Python辅助Word+Excel:让办公更高效
上QQ阅读APP看书,第一时间看更新

028 使用对称差集方法筛选工作表

此案例主要通过使用Python语言的集合的symmetric_difference()方法获取两个集合的对称差集,从而实现在两个工作表中筛选不同的行(或者说删除相同的行)。当运行此案例的Python代码(A361.py文件)之后,将根据“学员表.xlsx”文件的Java学员表和Android学员表筛选仅学一门课程的学员,即删除同时学习Java和Android的学员,Java学员表如图028-1所示,Android学员表如图028-2所示,筛选的仅学一门课程的学员表如图028-3所示。

图028-1

图028-2

图028-3

A361.py文件的Python代码如下:

import openpyxl
myBook=openpyxl.load_workbook('学员表.xlsx',data_only=True)
mySheet1=myBook['Android学员表']
mySheet2=myBook['Java学员表']
#将Android学员表复制成仅学一门课程的学员表(mySheet3)
mySheet3=myBook.copy_worksheet(mySheet1)
mySheet3.title='仅学一门课程的学员表'
#删除仅学一门课程的学员表(mySheet3)的行(第1行除外)
while mySheet3.max_row >1:
      mySheet3.delete_rows(2)
#根据Android学员表(mySheet1)的行(第1行除外)创建集合(mySet1)
mySet1=set(list(mySheet1.values)[1:])
#根据Java学员表(mySheet2)的行(第1行除外)创建集合(mySet2)
mySet2=set(list(mySheet2.values)[1:])
#计算mySet1和mySet2两个集合的对称差集(mySet3),即获得两个工作表(集合)不同的行
mySet3=mySet1.symmetric_difference(mySet2)
#循环集合(mySet3)的行(myRow)数据
for myRow in mySet3:
    #将行(myRow)数据添加到仅学一门课程的学员表(mySheet3)中
    mySheet3.append(myRow)
myBook.save('结果表-学员表.xlsx')

在上面这段代码中,mySet3=mySet1.symmetric_difference(mySet2)表示mySet1和mySet2两个集合的对称差集(mySet3)。集合A与集合B的对称差集定义为在集合A与集合B中所有不属于A∩B的元素(成员)的集合,请看下面这个简单的例子:

mySet1={1,2,3}
mySet2={1,3,5}
mySet3=mySet1.symmetric_difference(mySet2)
print(mySet3)#输出:{2,5}

需要说明的是:mySet3=mySet1.symmetric_difference(mySet2)也可以写成mySet3=mySet1^mySet2。

此案例的源文件是MyCode\A361\A361.py。