Home » Python » OpenPyXLの使い方 » OpenPyXLで複数ブックのシート名一覧を再帰的に出力する

OpenPyXLで複数ブックのシート名一覧を再帰的に出力する

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.11.1(64-bit) + OpenPyXL 3.0.10

拙著『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 openpyxl as xl
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」で区切って出力しています。

最終更新日時:2023-03-15 13:18

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLで複数ブックのシート名一覧を再帰的に出力する

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.