openpyxlでエクセルのシート一覧を表示するお話

仕事でよくエクセルを使って仕様書を書いたりします。
その際に「シート一覧」を記載する箇所が出てきます。

そんな時にいつもいい方法がないものかと思っていましたが、そういえばPythonでエクセルをいじったこともあったなと思い、今回はPythonのopenpyxlを使ってエクセルのシート一覧を出力する方法書いてみました。

GitHubに登録した方がいいよなぁ…。

環境

Windows10 64bit

Python 3.6.5

openpyxl==2.5.4

Pythonはこちらからインストーラをダウンロードしてインストール。
パスは勝手に設定してくれるんだっけ…?

Python3系ではpipがデフォルトで使えたと思うので、以下のコマンドでopenpyxlを取得

pip install openpyxl

openpyxlはxlsx形式しかサポートしていないようです。(少なくとも上記のバージョンで確認)
xls形式ではブックを読み込もうとしたときに例外が発生します。

あ、xlsm形式は確認していません。

コードを書いてみる

# -*- coding: utf-8 -*-

import openpyxl as px
import sys
from os import path

"""
引数に指定されたxlsxファイルのシート一覧を出力する。
openpyxlがxls形式に対応していない。
"""

args = sys.argv

if len(args) != 2:
	print("引数がおかしい")
	print("usage:\tpython " + path.splitext(__file__)[0] + ".py <xlsx file name>")
	exit(0)

bookName = args[1]
MARGIN = 2
fileNameStr = "File Name : " + bookName
print() # ただの改行
print("#" * (len(fileNameStr) + MARGIN))
print(" " + fileNameStr)
print("#" * (len(fileNameStr) + MARGIN))
print() # ただの改行

wb = None

try:
	wb = px.load_workbook(bookName)
	sheets = wb.sheetnames
	for sheet in sheets:
		print(sheet)
except:
	print("エラーが発生しました")
	print("except節のコメントを外すと詳細が確認できます")
	print(sys.exc_info()[0])
finally:
	if wb is not None:
		wb.close()
		wb = None

説明するほどのコード量でもないですが、流れとしては引数に指定されたエクセルブックを読み込んで、シート一覧をfor文で出力しているだけです。
MARGINはただ単にファイル名を出力する際にきれいに見えないもんかと思って調整しただけです。

ファイルをopenしたらちゃんとcloseするコードを入れましょう。
たまにおかしくなっちゃうらしいので。

使い方

任意のフォルダに上記のpythonファイルを保存してください。ここではファイル名は「printexcelsheet.py」とします。

python printexcelsheet.py <Excel File Name>

マルチバイトのファイル名、シート名もOKです。
以下はPowerShellで実行した結果です。

xls形式は例外が出ます。

まとめ

Pythonをインストールして、openpyxlをインストールして、上記のコードをコピペして、コマンドから実行してください。

Pythonは色々気軽にできるからいいですね。
環境に依存しないっていう意味ではJavaScriptでできた方がいいのかな。
それでもWindows限定だけど。

0

シェアする

  • このエントリーをはてなブックマークに追加

フォローする