「python excel ワークシート 削除 xlsx」
という検索キーワードでアクセスがありました。
Pythonを使ってExcelのワークシートを削除するには、どのようなコードを書けばいいのかを探していた方による検索です。
Workbook.remove()メソッドでシートを削除するスクリプト
Cドライブのtempフォルダーに複数のシートが存在するブックfoo.xlsxを用意しておいて、以下のスクリプトを実行すると末尾のシートが削除され、foo2.xlsxとして保存されます。
wb = openpyxl.load_workbook(r'C:\temp\foo.xlsx')
wb.remove(wb.worksheets[-1])
remove_sheet()メソッドではDeprecationWarningが表示される
『退屈なことはPythonにやらせよう―ノンプログラマーにもできる自動化処理プログラミング』では、remove_sheet()メソッドが紹介されていますけれど、現在のバージョンではget_sheet_names()メソッドと同じく、以下のようなDeprecationWarningが表示されます。
DeprecationWarning: Call to deprecated function remove_sheet (Use wb.remove(worksheet) or del wb[sheetname]).
このWarningの指示どおり、Workbook.remove()メソッドを使ったのが上記のスクリプトです。
Pythonのdel文でシートを削除するスクリプト
DeprecationWarningに従って試してみると、Pythonのdel文を使った以下のようなスクリプトでも「Sheet」という名前のシートを削除できます。
wb = openpyxl.load_workbook(r'C:\temp\foo.xlsx')
del wb['Sheet']
OpenPyXLの基本設計が垣間見える興味深いコードですが、通常は先のWorkbook.remove()メソッドを使うほうが良さそうに、今の私には感じられます。
1枚しかないシートを削除しようとした場合
OpenPyXLで、1枚しかシートが存在しないブックからシートを削除しようとしたときの挙動は、Excel VBAと大きく異なります。
Excel VBAで、1枚しかないシートを削除しようとした場合、
ブックのシートをすべて削除または非表示にすることはできません。
選択したシートを非表示、削除、または移動するには、まず新しいシートを挿入するか、非表示のシートを表示してください。
という実行時エラーが発生して、処理は中断されます。
これに対しOpenPyXLの場合、シートの削除は実行されるものの、保存時に、
KeyError: 'Worksheet Sheet does not exist.'
とエラーが発生し、Excelでは正常に開くことのできないfoo2.xlsxファイルが作られます。
最終更新日時:2023-05-08 11:34
Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを削除する-Workbook.remove()/Pythonのdel文