2017-06-22 34 views
0

我是新來的python,我試圖轉換一些VBA用於格式化Excel文件到Python。我有一個包含100個工作表的excel文件,如果他們不在列表中,我想刪除工作表。例如,工作簿包含工作表'Sheet1','Sheet2',...'Sheet100'如果他們不在此列表中,我想刪除所有選項卡['Sheet25','Sheet50','Sheet75','Sheet100 「]。Python - openpyxl - 刪除多個標籤,如果他們在列表

我能夠使用此代碼來刪除一個工作表:

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

回答

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

的問題是,你是混淆了對象表工作表名稱。 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') 
相關問題