我是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')`
答案 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')