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

030 使用filter()函数转换二维工作表

此案例主要通过使用Python语言的filter()函数,从而实现将一维工作表转换为二维工作表。当运行此案例的Python代码(A312.py文件)之后,将把“收入表.xlsx”文件的一维表转换为二维表,图030-1表示转换之前的一维表,图030-2表示转换之后的二维表。

图030-1

图030-2

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

import openpyxl
myBook=openpyxl.load_workbook('收入表.xlsx')
mySheet=myBook['一维表']
myRange=list(mySheet.values)[1:]
myTypes=list({myCell.value:''for myCell in mySheet['B'][1:]})
#print(myTypes)
myQuarters=list({myCell.value:''for myCell in mySheet['A'][1:]})
#print(myQuarters)
myNewBook=openpyxl.Workbook()
myNewSheet=myNewBook.active
myNewSheet.title='二维表'
myNewSheet.append(['季度']+         myTypes)
for myQuarter in myQuarters:
  mySets=[(myQuarter,myType)for myType in myTypes]
  myNewSheet.append([myQuarter]+[list(filter(lambda myParam:myParam[0]
   ==mySet[0]and myParam[1]==mySet[1],myRange))[0][2]for mySet in mySets])
myNewBook.save('结果表-收入表.xlsx')

在上面这段代码中,myQuarters=list({myCell.value:'for myCell in mySheet['A'][1:]})表示通过字典清除一维表A列(季度)的重复内容,因此myQuarters包含的内容是:['1季度','2季度','3季度','4季度']。

myTypes=list({myCell.value:'for myCell in mySheet['B'][1:]})表示通过字典清除一维表B列(业务类别)的重复内容,因此myTypes包含的内容是:['家电收入','建材收入','其他收入']。

list(filter(lambda myParam:myParam[0]==mySet[0]and myParam[1]==mySet[1],myRange))[0][2]的filter()函数表示根据传入的参数myParam,对myRange范围(A2:C13)的数据进行筛选,在此即是筛选myRange每行符合mySet[0](季度)和mySet[1](业务类别)的数据。

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