LoginSignup
2
2

More than 3 years have passed since last update.

【Python】Workbook.removeメソッドを使ってシートを削除する

Posted at

pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、シートの削除に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。

「概要_1」「概要_1 (2)」「概要_2」「概要_2 (2)」・・・「概要_5」「概要_5 (2)」と言う名前のシートを持つ
ブック「資料」の「(2)」がついているシートだけ全て削除したいとします。

Workbook.removeメソッド

wb.remove(シート)

シート名ではなくて、Worksheetオブジェクトを渡すことでシートを削除してくれます。

例)remove_sheet.py
from openpyxl import load_workbook

wb = load_workbook('資料.xlsx')

for ws in wb.worksheets:
    if ws.title.endswith('(2)'):
        wb.remove(ws)

wb.save('資料_変更後.xlsx')

今回は指定の文字列が全てシート名の後ろにあったため、
str.endswithメソッドを使用しました。
他にも以下のようなメソッドがありました。

  • str.startswith():先頭が指定された文字列で始まっているかを返す。
  • str.endwith():末尾が指定された文字列で終わっているかを返す。
  • str.find():指定の文字列の位置を返す。
  • str.isnumeric():すべてが数値かどうかを返す。

余談:in演算子

私はよくシートのコピーばかりをして
「概要_1」「概要_1 (2)」「概要_1 (3)」「概要_1 (4)」・・・「概要_1 (10)」
なんて状態になるのですが、
こういう場合のコピー分(2)~(10)だけを消したい場合はin演算子を使うと良いようです。

例)remove_sheet.py
from openpyxl import load_workbook

wb = load_workbook('資料.xlsx')

for ws in wb.worksheets:
    if '(' in ws.title and ')' in ws.title:
        wb.remove(ws)

wb.save('資料_変更後.xlsx')

共通するものが何かを判断して、うまくコードを記述していきたいです!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2