Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python openpyxl:删除工作表导致索引器错误:保存工作表时列表索引超出范围错误_Python_Excel_Python 3.x_Openpyxl - Fatal编程技术网

Python openpyxl:删除工作表导致索引器错误:保存工作表时列表索引超出范围错误

Python openpyxl:删除工作表导致索引器错误:保存工作表时列表索引超出范围错误,python,excel,python-3.x,openpyxl,Python,Excel,Python 3.x,Openpyxl,我正在尝试使用openpyxl来: 打开包含3个工作表(表1、表2、表3)的Excel(2016)工作簿 删除工作表(表2) 将工作簿保存到另一个工作簿2 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") w

我正在尝试使用openpyxl来:

  • 打开包含3个工作表(表1、表2、表3)的Excel(2016)工作簿
  • 删除工作表(表2)
  • 将工作簿保存到另一个工作簿2

    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
    将生成一个
    索引器:列表索引超出范围
    错误,并生成一个损坏的book2.xlsx文件,Excel无法打开。

    我遇到了类似的问题,只有
    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")
    
    我必须提到,这不是很好的编程实践,但并没有设置活动表的方法,只能得到一个

    编辑:刚刚发现此回购已移动到
    比特桶
    ,并发现它有设置活动工作表的方法。只需使用:

    wb.active = 0
    

    如果您认为存在错误,那么您应该提交一份错误报告。我是openpyxl的新手。我很高兴提交一份错误报告,但只是想确保我的代码是openpyxl的有效使用。代码看起来不错,不过
    del wb['Sheet2']
    是一种更简单的工作方式。您需要提供一个文件。谢谢!附加详细信息的Bug报告归档