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

时间:2016-12-17 21:52:55

标签: python excel python-3.x openpyxl

我正在尝试使用openpyxl:

  1. 打开包含3个工作表的Excel(2016)工作簿(Sheet1,Sheet2,Sheet3)
  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")
  4. wb.save会生成IndexError: list index out of range错误并生成一个Excel无法打开的已损坏的book2.xlsx文件。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,只有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