Home » Python » xlrdの使い方 » xlrdで全シート名を取得する

xlrdで全シート名を取得する

動作検証バージョン:Windows 10 + Python 3.7.3 + xlrd 1.2.0

「python xlwings シート名」
という検索キーワードをきっかけに、xlwingsで指定したExcelファイルの全シート名を取得するコードをご紹介しました。

他のライブラリーを使った場合に、どのようなコードになるのか気になりますので、xlrdでスクリプトを書いてみました。

[スポンサードリンク]

xlrdで全シート名をprintするサンプル

xlrdの場合、以下のようなコードで、Cドライブtempフォルダーのfoo.xlsxブックの、全シートの名前を出力できます。
import xlrd
bk = xlrd.open_workbook('C:\\temp\\foo.xlsx')
for sh in bk.sheets():
    print(sh.name)

出力結果はwlwingsを使った場合と、もちろん同じですが終了までにかかる時間は、xlrdのほうが短く済みます。

xlwingsの場合とxlrdの場合の違い

コードの見た目は、xlwingsを使った場合と、よく似ていますが、もちろん中身はまったく違います。

importするのはxlwingsでしたが、
  import xlwings
今回は当然xlrdです。
  import xlrd

ブックを開く処理が、xlwingsの場合は、
  bk = xlwings.Book('C:\\temp\\foo.xlsx')
でしたがが、xlrdでは
  bk = xlrd.open_workbook('C:\\temp\\foo.xlsx')
です。

全シートを表すオブジェクトを取得するfor文が、xlwingsでは、
  for sh in bk.sheets:
となっていましたが、xlrdでは、
  for sh in bk.sheets():
です。コード的にはよく似ていますが「sheets」の直後にカッコが必須です。

xlrdで全シート名のリストを作成するサンプル

全シート名を出力するのではなく、リストとして取得したいのなら、以下のコードが参考になるでしょう。

import xlrd
bk = xlrd.open_workbook('C:\\temp\\foo.xlsx')

sheet_names = []
for sh in bk.sheets():
    sheet_names.append(sh.name)
print(sheet_names)

先述のprintするスクリプトよりも、リストにする分、ちょっとコードが増えています。
  sheet_names = []
  for sh in bk.sheets():
      sheet_names.append(sh.name)

リスト内包表記を使えば、以下のようなシンプルなコードで済みます。
import xlrd
bk = xlrd.open_workbook('C:\\temp\\foo.xlsx')
sheet_names = [ sh.name for sh in bk.sheets() ]
print(sheet_names)

Book.sheet_names()で全シート名のリストを取得できる

本当にただ全シート名を取得したいのなら、xlrdの場合はBook.sheet_names()を使うのが簡単です。
import xlrd
bk = xlrd.open_workbook('C:\\temp\\foo.xlsx')
print(bk.sheet_names())

xlrdのほうが速い

実行時のスピードは、今回ご紹介したxlrdのほうが、圧倒的に速くなっています。
xlwingsの場合は、Excelを起動しますから仕方ありません。

「python xlwings シート名」と検索なさった方が、本当のところ何を求めてらしたのかはわかりませんが、既存のExcelファイルを利用するだけならば、xlwingsよりもxlrdを使うほうが良さそうに感じます。

最終更新日時:2019-07-22 10:49

[スポンサードリンク]

Home » Python » xlrdの使い方 » xlrdで全シート名を取得する

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

検索


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

.