拙著『VBAユーザーのためのPython超入門』で、以下のようなコードをご紹介しています。
import glob
for path in glob.glob(r'C:\temp\**', recursive=True):
print(path)
Cドライブtempフォルダー下の全ファイルのフルパスを取得・出力するスクリプトです。
VBAで再帰処理を実装しようとすると、結構なコードを書く必要がありますが、Pythonではライブラリを利用することで、このように簡単なコードで済んでしまうのが嬉しいところです。
どのブックにどのワークシートがあるかわからなくなったときに
大量のExcelファイルを扱っていると、どのブックに、どのワークシートを入れたかがわからなくなってしまうことがあります。
そんなときに、先ほどのスクリプトにOpenPyXLを使ったコードを組み合わせると、簡単にシート名一覧等を出力できます。
もちろん、そのような状況にならないのがイイわけですが。
OpenPyXLを使って複数ブックのシート名一覧を再帰的に出力するサンプルスクリプト
以下のスクリプトを実行すると、Cドライブtempフォルダー下にある全xlsxファイルの全シート名とパスが出力されます。
import glob
for path in glob.iglob(r'c:\temp\**\*.xlsx', recursive=True):
bk = xl.load_workbook(path, read_only=True)
print(bk.sheetnames, path, sep='\t')
bk.close()
ここでは、メモリーの消費を抑えつつ似たような処理を行ってくれるglobモジュールのiglob()関数を使った処理にしました。
Cドライブtempフォルダーのxlsxファイルのみを処理対象とするため、glob.iglob()関数に指定する引数を「r'c:\temp\**\*.xlsx'」としています。
for path in glob.iglob(r'c:\temp\**\*.xlsx', recursive=True):
for文の中では、OpenPyXLのload_workbook()関数を使って、順番にブックを開き、変数bkに代入しています。
bk = xl.load_workbook(path, read_only=True)
その際、load_workbook()関数の引数read_onlyにTrueを設定することで、高速な読み込みを行っています。
read_only=Trueで読み込みを行ったときには、Workbookオブジェクトのclose()メソッドで閉じる必要があるため、for文内の処理の最後に、
bk.close()
とWorkbook.close()メソッドを実行しています。
for文内のメインの処理は、
print(bk.sheetnames, path, sep='\t')
の行です。 OpenPyXLのWorkbook.sheetnames属性で取得できる全シート名のリストと、glob.iglob()関数で取得したブックのパスを、タブ文字「\t」で区切って出力しています。
- 『VBAユーザーのためのPython超入門』出ました。
- 『VBAユーザーのためのPython超入門』に登場するVBA関数一覧
- 『VBAユーザーのためのPython超入門』に登場するPythonの関数・メソッド一覧
最終更新日時:2023-03-15 13:18
- Newer:xlwingsのセル番地取得はRange.get_address()がaddressより高機能
- Older:xlwingsで最終行番号を取得する-Sheet.used_range.last_cell.row
Home » Python » OpenPyXLの使い方 » OpenPyXLで複数ブックのシート名一覧を再帰的に出力する