Python - openpyxl - 删除多个选项卡(如果它们在列表中)

时间:2017-06-22 14:03:31

标签: python python-3.x openpyxl

我是python的新手,我试图将用于格式化excel文件的一些VBA转换为python。我有一个包含100个工作表的excel文件,如果它们不在列表中,我想删除工作表。例如,工作簿包含工作表' Sheet1',' Sheet2',...' Sheet100'我想删除所有标签,如果它们不在此列表中[' Sheet25',' Sheet50',' Sheet75',' Sheet100' ]

我可以使用此代码删除单个工作表:

wb = openpyxl.load_workbook('testdel.xlsx')
delete = wb.get_sheet_by_name('Sheet2')
wb.remove_sheet(delete)  
wb.save('testdel2.xlsx')

我尝试过这段代码删除多张/和/或单张,但我似乎无法让它工作。有关如何修改的任何建议,如果它们不在列表中,将删除所有工作表?在此先感谢您的帮助!

wb = openpyxl.load_workbook('testdel.xlsx')
ws = wb.get_sheet_names()
if ws is not ['Sheet25', 'Sheet50', 'Sheet75', 'Sheet100']:
    wb.remove_sheet(ws)
wb.save('testdel2.xlsx')`

2 个答案:

答案 0 :(得分:2)

问题是您将工作表名称与工作表对象混淆。 wb.remove_sheet()需要传递现有工作表。但是,使用del wb[sheetName]

会更容易
wb = openpyxl.load_workbook('testdel.xlsx')

keep_sheets = ['Sheet25', 'Sheet50', 'Sheet75', 'Sheet100']
for sheetName in wb.sheetnames:
    if sheetName not in keep_sheets:
        del wb[sheetName]
wb.save('testdel2.xlsx')

答案 1 :(得分:1)

wb = openpyxl.load_workbook('testdel.xlsx')
ws = wb.get_sheet_names()
for sheetName in ws:
    if sheetName not in ['Sheet25', 'Sheet50', 'Sheet75', 'Sheet100']:
        sheetToDelete = wb.get_sheet_by_name(sheetName) // gets the sheet object
        wb.remove_sheet(sheetToDelete)
wb.save('testdel2.xlsx')