openpyxl: remove_sheet causes IndexError: list index out of range error on saving sheet
openpyxl: remove_sheet causes IndexError: list index out of range error on saving sheet
我正在尝试使用 openpyxl 来:
- 打开包含 3 个工作表(Sheet1、Sheet2、Sheet3)的 Excel (2016) 工作簿
- 删除工作表 (Sheet2)
将工作簿保存到除 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
错误并生成损坏的 book2.xlsx 文件,Excel 无法打开。
我 运行 遇到了类似的问题,只有 xlwt
库。无论如何,原因是一样的,您删除了设置为活动 sheet 的 sheet。因此,要解决此问题,请在保存工作簿之前将其他一些 sheet 设置为活动状态。在 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")
我必须提一下,这不是很好的编程习惯,但是没有设置活动的方法sheet,只能得到一个。
编辑:刚刚发现这个 repo 被移动到 bitbucket
,并且发现它有设置活动 sheet 的方法。只需使用:
wb.active = 0
我正在尝试使用 openpyxl 来:
- 打开包含 3 个工作表(Sheet1、Sheet2、Sheet3)的 Excel (2016) 工作簿
- 删除工作表 (Sheet2)
将工作簿保存到除 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
错误并生成损坏的 book2.xlsx 文件,Excel 无法打开。
我 运行 遇到了类似的问题,只有 xlwt
库。无论如何,原因是一样的,您删除了设置为活动 sheet 的 sheet。因此,要解决此问题,请在保存工作簿之前将其他一些 sheet 设置为活动状态。在 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")
我必须提一下,这不是很好的编程习惯,但是没有设置活动的方法sheet,只能得到一个。
编辑:刚刚发现这个 repo 被移动到 bitbucket
,并且发现它有设置活动 sheet 的方法。只需使用:
wb.active = 0