2017-06-22 10 views
0

私はPythonには新しく、Excelファイルをフォーマットするために使用されたいくつかのVBAを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') 
関連する問題