openpyxlでEXCELのシート名をいじくる。一括変更、指定の文字列を含んだら削除、等。

200個くらいシートがあるEXCELファイルを修正しないといけない(それもファイルは複数ある!)場面に遭遇し、手動でやるのは精神が病みそうになるということで、pythonのopenpyxlというものを使って自動化を図りました。

これがすごく便利で、いろいろな単純作業をなくせそうな気がしています。

 

今回はシート名をいじくる系で書いたスクリプトをメモしておこうと思います。

 

やりたいこと

 

①シート名を一括で同様の変更を加えたい

例)「001→ID001」、「002→ID002」

 

②シート名に番号をふりたい

例)「渋谷区 → 1_渋谷区」、「武蔵野市 → 2_武蔵野市」

 

③特定の文字列を含むシートを一括削除したい

例)「(2)」という文字列を含むシートを削除する

 

ではそれぞれやっていきます。

 

コード

①、②シート名を一括で操作する

 

px.load_workbook(“パス”)で指定したパスのエクセルファイルを開きます。

for ws in wb で各シートを取り出すループを回すことができます。

シート名はws.titleで操作できます。

連番を付けたい場合は、ループをin enumerateで回すことで可能です。

 

③特定の文字列(を含む)シートを削除

作業したいエクセルファイルが複数あった場合は、それを同じフォルダに入れておくと、glob.glob(“パス”)でループを回すことができます。

glob.globはフォルダ配下のファイルパスを取得します。すべて取得するために、パスを指定する際に”*”を末尾につけておきます。

①,②同様にfor ws in wbでループを回します。

シートの削除はwb.remove_sheet(シートオブジェクト)で可能です。シートオブジェクトはwb.get_sheet_by_name(シート名)で取得できるので組み合わせます。

シートを検索して削除する場合は、if文を使います。

 

おわり