Openpyxl无法正确删除已创建工作簿中的工作表

时间:2017-09-20 16:38:16

标签: python openpyxl

所以我遇到了remove_sheet()与openpxyl的问题,我无法找到答案。当我运行以下代码时:

import openpyxl

wb = openpyxl.Workbook()
ws = wb.create_sheet("Sheet2")
wb.get_sheet_names()
['Sheet','Sheet2']
wb.remove_sheet('Sheet')     

我收到以下错误:

ValueError: list.remove(x): x not in list

它不起作用,即使我尝试wb.remove_sheet(0)wb.remove_sheet(1),我也会遇到同样的错误。有什么我想念的吗?

4 个答案:

答案 0 :(得分:8)

remove.sheet()被赋予了一个工作表对象,而不是工作表的名称!

因此,对于您的代码,您可以尝试

wb.remove(wb.get_sheet_by_name(sheet))

同样,remove_sheet也没有给出索引,因为它在实际的工作表对象上运行。

这里有good source个例子(虽然它不是你面临的同样问题,但它恰好表明了如何正确调用remove_sheet方法)!

答案 1 :(得分:4)

DeprecationWarning:调用已弃用的函数get_sheet_by_name(使用wb [sheetname])。

xlsx = Workbook()
xlsx.create_sheet('other name')
xlsx.remove(xlsx['Sheet'])
xlsx.save('some.xlsx')

答案 2 :(得分:1)

自从发布并回答了问题以来,Openpyxl库已更改。

您不应该按照@cosinepenguin的指示使用wb.remove(wb.get_sheet_by_name(sheet)),因为它已经贬值了(尝试使用时会收到警告),但是wb.remove(wb[sheet])

答案 3 :(得分:1)

在python 3.7中

 import openpyxl

 wb = openpyxl.Workbook()

 ws = wb.create_sheet("Sheet2")

 n=wb.sheetnames

 #sheetname =>get_sheet_names()

 wb.remove(wb["Sheet"])

 '#or can use' 

 wb.remove(wb[n[1]])

1是索引表“工作表”