Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを削除する-Workbook.remove()/Pythonのdel文

OpenPyXLでシートを削除する-Workbook.remove()/Pythonのdel文

動作検証バージョン:Windows 10 + Python 3.7.3 + OpenPyXL 2.6.2

「python excel ワークシート 削除 xlsx」
という検索キーワードでアクセスがありました。

Pythonを使ってExcelのワークシートを削除するには、どのようなコードを書けばいいのかを探していた方による検索です。

Workbook.remove()メソッドでシートを削除するスクリプト

Cドライブのtempフォルダーに複数のシートが存在するブックfoo.xlsxを用意しておいて、以下のスクリプトを実行すると末尾のシートが削除され、foo2.xlsxとして保存されます。

import openpyxl

wb = openpyxl.load_workbook(r'C:\temp\foo.xlsx')
wb.remove(wb.worksheets[-1])

wb.save(r'C:\temp\foo2.xlsx')

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」という名前のシートを削除できます。

import openpyxl

wb = openpyxl.load_workbook(r'C:\temp\foo.xlsx')
del wb['Sheet']

wb.save(r'C:\temp\foo2.xlsx')

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文

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.