如何在保留分组的同时按工作表拆分Excel工作簿

时间:2019-06-14 15:29:34

标签: python excel pandas xlrd

我正在为工作做一些excel报告,并且每天收到一本从SSRS导出的书。这本书设置得很好,对每张纸都应用了分组,以产生类似于数据透视表的效果。

但是,这本书有32页,我最终需要单独发送每页作为单独的报告。现在,我正在手动拆分它们,但是我想知道是否有一种方法可以在保留分组的同时实现自动化。

我以前尝试过类似的东西:

import xlrd 
import pandas as pd

targetWorkbook = xlrd.open_workbook(r'report.xlsx', on_demand=True)

xlsxDoc = pd.ExcelFile('report.xlsx') 

for sheet in targetWorkbook.sheet_names():
    reportDF = pd.read_excel(xlsxDoc, sheet)

    reportDF.to_excel("report - {}.xlsx".format(sheet))

但是,由于我将每个工作表都转换为熊猫数据报,因此分组丢失了。

有多种方法可以在python中与excel文档进行读取/交互,但是我找不到一种清晰的方法来挑选表格并将其另存为自己的文档而不会丢失分组。

1 个答案:

答案 0 :(得分:1)

这是我的完整答案。我使用了 Worksheets()。Move()方法。主要思想是使用 win32com.client 库。

这已通过测试,可在装有Excel 2013和Python 3.7的Windows 10系统上使用。分组格式随工作表原封不动地移动。我仍在努力使循环工作。当我开始循环工作时,我将再次修改答案。

我的示例包含3个工作表,每个工作表具有不同的分组(小计)格式。

#
# Refined .Move() method, save new file using Active Worksheet property.
#
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb0 = excel.Workbooks.Open(r'C:\python\so\original.xlsx')
excel.Visible = True

# Move sheet1.
wb0.Worksheets(1).Move()
excel.Application.ActiveWorkbook.SaveAs(r'C:\python\so\sheet1.xlsx')

# Move sheet2, which is now the front sheet.
wb0.Worksheets(1).Move()
excel.Application.ActiveWorkbook.SaveAs(r'C:\python\so\sheet2.xlsx')  

# Save single remaining sheet as sheet3.
wb0.SaveAs(r'C:\python\so\sheet3.xlsx')
wb0.Close()
excel.Application.Quit()

您还需要安装pywin32,这不是标准库项目。 https://github.com/mhammond/pywin32

pip install pywin32