「python xlwings シート名」
という検索キーワードをきっかけに、xlwingsで指定したExcelファイルの全シート名を取得するコードをご紹介しました。
他のライブラリーを使った場合に、どのようなコードになるのか気になりますので、xlrdでスクリプトを書いてみました。
xlrdで全シート名をprintするサンプル
xlrdの場合、以下のようなコードで、Cドライブtempフォルダーのfoo.xlsxブックの、全シートの名前を出力できます。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で全シート名のリストを作成するサンプル
全シート名を出力するのではなく、リストとして取得したいのなら、以下のコードが参考になるでしょう。
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)
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()を使うのが簡単です。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