Pythonでエクセルを操作する際に、openpyxlライブラリーを使用している方は多いと思います。
特定のシートだけを残して、不要なシートを削除するコード作成でハマりました。
どなたかのお役に立てれば幸いです。
前提条件
○ファイルの保存場所は一定
サンプルファイルの保存場所 ’C:\\Users\\ashio\\workspace\\Template\\openpyxl\\data\\’
サンプルファイル名 ‘サンプル.xlsm’
あえてマクロが含まれているファイル.xlsmにしました。
あなたが使用するファイル拡張子が.xlsxの場合は、忘れずに.xlsxに書き換えて下さい。
○残すシート名は「まとめ」
残すシート名は「まとめ」シートのみです。
他の人が勝手にシート名の変更や追加している可能性があるので、全シート名を取得してから削除します。
ループでシート名を取得して、「まとめ」以外のシート名を「削除対象」に変更してから、削除しています。
シートの順番が変更されていても、問題なく動きます。
サンプルファイル
ファイルにはこのように、複数のシートが含まれています。
今回は「まとめ」シートだけを残します。
下のサンプルコードを実行して保存されたエクセルファイルはこちら。
「まとめ」シートだけが残っています。
サンプルコード内にコメントを記載していますので、ご参照ください。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import openpyxl file_path = 'C:\\Users\\ashio\\workspace\\Template\\openpyxl\\data\\' #マクロが含まれているファイルを開く fname = file_path + 'サンプル.xlsm' #keep_vba=Falseオプションでマクロを無視 wb=openpyxl.load_workbook(fname, data_only=True, keep_vba=False) #シート名を取得 sheetnames = wb.sheetnames #ループで、「まとめ」以外のシートを削除 for sheet in sheetnames: #シート名が「まとめ」ならば何もしない if sheet=='まとめ': pass else: #シート名が「まとめ」以外ならばシート名を変更して、削除する。 #ワークシートオブジェクトを作って ws = wb[sheet] #シート名を変更 ws.title = '削除対象' #シートを削除 del wb['削除対象'] #新しいファイル名を付けて保存 wb.save("C:\\Users\\ashio\\workspace\\Template\\openpyxl\\data\\まとめシートのみ.xlsx") wb.close() |
この記事を書いた人
あしおゆたか
投資歴21年の個人投資家
机上の理論ではなく、実体験に基づいた記事作りをモットーにしています。
スポーツクラブに毎週2日~3日通い、サウナ後の暴飲暴食が趣味。(現在自粛中)
◇主な投資対象
日本株式
株式ETF(上場投資信託)
日経225先物
日経225先物オプション
◇運営者情報はこちら