筛选一个工作簿中的所有工作表数据

import xlwings as xw
import pandas as pd
app = xw.App(visible=False,add_book=False) # 启动excel
workbook = app.books.open(r’d:\python_file\采购表.xlsx’) # 打开要处理的工作簿
worksheet = workbook.sheets # 列出工作簿中的所有工作表
table = pd.DataFrame() # 创建一个空DataFrame
for i, j in enumerate(worksheet): # 遍历工作簿中的工作表
values = j.range(‘a1′).options(pd.DataFrame,header=1,index=False,expand=’table’).value # 读取当前工作表数据
data = values.reindex(columns=[‘采购物品’,’采购日期’,’采购数量’,’采购金额’]) # 调整列的顺序,将”采购物品”移到第1列
table = table.append(data,ignore_index=True) # 将调整列顺序后的数据合并到前面创建的DataFrame中
table = table.groupby(‘采购物品’) # 根据采购物品列筛选数据
new_workbook = xw.books.add() # 新建一个工作簿
for idx, group in table: # 遍历筛选好的数据,其中idx对应物品名称, group对应该物品的所有明细数据
new_worksheet = new_workbook.sheets.add(idx) # 在新工作簿中新增工作表,以物品名称作为工作表名
new_worksheet[‘a1’].options(index=False).value = group # 在新工作表中写入当前物品的所有明细数据
last_cell = new_worksheet[‘a1’].expand(‘table’).last_cell # 获取当前工作表数据区域右下角的单元格
last_row = last_cell.row # 获取数据区域*后一行行号
last_column = last_cell.column # 获取数据区域*后一列的列号
last_column_letter = chr(64 + last_column) # 将数据区域*后一列的列号(数字)转换为该列的列标(字母)
sum_cell_name = ‘{}{}’.format(last_column_letter,last_row+1) # 获取数据区域右下角单元格下方的单元格位置
sum_last_row_name = ‘{}{}’.format(last_column_letter,last_row) # 获取数据区域右下角单元格位置
formula = ‘=SUM({}2:{})’.format(last_column_letter,sum_last_row_name) # 根据前面获取的单元格位置构造excel公式,对采购金额求和
new_worksheet[sum_cell_name].formula = formula # 将求和公式写入数据区域右下解单元格下方的单元格中
new_worksheet.autofit() # 根据单元格中的数据内容自动调整工作表的行高和列宽
new_workbook.save(r’d:\python_file\采购分类表.xlsx’) # 保存新建的工作簿并命名为 “采购分类表.xlsx”
workbook.close()
app.quit()