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の指示どおり、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の基本設計が垣間見える興味深いコードですが、通常は先のremove()メソッドを使うほうが良さそうに感じます。

1枚しかないシートを削除しようとした場合

OpenPyXLで、1枚しかシートが存在しないブックからシートを削除しようとしたときの挙動は、Excel VBAとは大きく異なります。

Excel VBAで、1枚しかないシートを削除しようとした場合、


ブックのシートをすべて削除または非表示にすることはできません。
選択したシートを非表示、削除、または移動するには、まず新しいシートを挿入するか、非表示のシートを表示してください。

という実行時エラーが発生し、処理は中断されます。

これに対しOpenPyXLの場合、シートの削除は実行されるものの、保存時に、


KeyError: 'Worksheet Sheet does not exist.'

とエラーが発生し、Excelでは正常に開くことのできないfoo2.xlsxファイルが保存されます。

最終更新日時:2019-05-09 04:30

[スポンサードリンク]

Home » Python » OpenPyXLでシートを削除する

TrackBack:0

TrackBack URL

Home » Python » OpenPyXLでシートを削除する

「Python」の記事一覧

検索


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

.