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')
共通するものが何かを判断して、うまくコードを記述していきたいです!