Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを削除する

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

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

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

[スポンサードリンク]

OpenPyXLのremoveメソッドでシートを削除するスクリプト

Cドライブのtempフォルダーに複数のシートが存在するブックfoo.xlsxを用意しておいて、以下のスクリプトを実行すると末尾のシートが削除され、foo2.xlsxとして保存されます。
import openpyxl
wb = openpyxl.load_workbook('C:\\temp\\foo.xlsx')
wb.remove(wb.worksheets[-1])
wb.save('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('C:\\temp\\foo.xlsx')
del wb['Sheet']
wb.save('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ファイルが作られます。

最終更新日時:2020-07-10 13:40

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを削除する

TrackBack:2

TrackBack URL
xlwingsでシートを削除する-Sheet.delete() from インストラクターのネタ帳
xlwingsでシートを削除するサンプルをご紹介しています。
OpenPyXLでシートを追加する時の挙動 from インストラクターのネタ帳
OpenPyXLのcreate_sheet()メソッドでシートを追加する際の疑問点をまとめました。

Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを削除する

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

検索


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

.