027 使用集合方法筛选两个工作表

此案例主要通过使用Python语言的集合的difference()方法获取两个集合的差集,从而实现在两个工作表中筛选不同的行。当运行此案例的Python代码(A345.py文件)之后,将根据“订单表.xlsx”文件的全部订单表和已出库订单表创建未出库订单表,全部订单表如图027-1所示,已出库订单表如图027-2所示,创建的未出库订单表如图027-3所示。

图027-1

图027-2

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

import openpyxl
myBook=openpyxl.load_workbook('订单表.xlsx',data_only=True)
mySheet1=myBook['全部订单表']
mySheet2=myBook['已出库订单表']
#将全部订单表(mySheet1)复制成未出库订单表(mySheet3)
mySheet3=myBook.copy_worksheet(mySheet1)
mySheet3.title='未出库订单表'
#删除未出库订单表(mySheet3)的行(第1行除外)
while mySheet3.max_row >1:
      mySheet3.delete_rows(2)
myList1=list(mySheet1.values)[1:]
myList2=list(mySheet2.values)[1:]
#根据全部订单表的行(第1行除外)创建集合(mySet1)
mySet1=set(myList1)
#根据已出库订单表的行(第1行除外)创建集合(mySet2)
mySet2=set(myList2)
#计算mySet1和mySet2两个集合的差集,即获得未出库订单表的行
mySet3=mySet1.difference(mySet2)
#循环集合(mySet3)的行(myRow)数据
for myRow in mySet3:
    #将行(myRow)数据添加到未出库订单表(mySheet3)中
    mySheet3.append(myRow)
myBook.save('结果表-订单表.xlsx')

图027-3

在上面这段代码中,mySet3=mySet1.difference(mySet2)表示mySet1和mySet2两个集合的差集(即mySet1-mySet2=mySet3)。一般情况下,mySet1代表全集,mySet2代表子集。因此在此案例中,如果设置mySet3=mySet2.difference(mySet1),则mySet3将是一个空集。

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