Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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_Python 3.x_Openpyxl - Fatal编程技术网

Python-openpyxl-删除列表中的多个选项卡

Python-openpyxl-删除列表中的多个选项卡,python,python-3.x,openpyxl,Python,Python 3.x,Openpyxl,我是python新手,我正在尝试将一些用于格式化excel文件的VBA转换为python。我有一个包含100个工作表的excel文件,如果工作表不在列表中,我想删除它们。例如,工作簿包含工作表'Sheet1'、'Sheet2'、…'Sheet100'如果所有选项卡不在此列表中,我希望删除这些选项卡['Sheet25'、'Sheet50'、'Sheet75'、'Sheet100'] 我可以使用此代码删除单个工作表: wb = openpyxl.load_workbook('testdel.xlsx

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

问题是您将工作表名称与工作表对象混淆。wb.remove_工作表需要传递给现有工作表。但是,仅使用del wb[sheetName]更容易


问题是您将工作表名称与工作表对象混淆。wb.remove_工作表需要传递给现有工作表。但是,仅使用del wb[sheetName]更容易

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')
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')