openpyxl:remove_sheet会导致IndexError:列表索引超出保存工作表的范围错误

我正在尝试使用openpyxl来:

  1. 打开包含3个工作表(Sheet1,Sheet2,Sheet3)的Excel(2016)工作簿,
  2. 删除工作表(Sheet2)
  3. 将工作簿保存到另一个工作簿减去Sheet2

    from openpyxl import load_workbook wb = load_workbook("c:/Users/me/book1.xlsx") ws = wb.get_sheet_by_name('Sheet2') wb.remove_sheet(ws) wb.save("c:/Users/me/book2.xlsx") 

wb.save将生成IndexError: list index out of range错误,并生成Excel无法打开损坏的book2.xlsx文件。

我遇到类似的问题,只能用xlwt库。 无论如何,原因是一样的,你删除被设置为活动页面的表单。 因此,要解决此问题,请在保存工作簿之前将其他工作表设置为活动状态。 在openpyxl ,它会是这样的:

 from openpyxl import load_workbook wb = load_workbook("c:/Users/me/book1.xlsx") ws = wb.get_sheet_by_name('Sheet2') wb.remove_sheet(ws) wb._active_sheet_index = 0 wb.save("c:/Users/me/book2.xlsx") 

不得不提的是,这不是很好的编程习惯,但是没有办法设置活动工作表,只能得到一个。

编辑:刚刚发现,这个回购被移动到bitbucket ,并发现它有设置活动工作表的方法。 只要使用:

 wb.active = 0