やりたいこと
エクセルファイルに中にあるテーブルデータをjson形式へ変換したい
こんな感じのエクセルデータから
Left align | Right align | Center align |
---|---|---|
This | This | This |
column | column | column |
will | will | will |
be | be | be |
left | right | center |
aligned | aligned | aligned |
こんな感じのjsonにしたい
[{"Left align": "This", "Right align": "This", "Center align": "This"}, その他データは省略]
やり方
さっそく調べた結果をソースコードにしました!
convert.py
import json
from openpyxl import load_workbook
import sys
# コマンドからエクセルファイル名を読み取る
args = sys.argv
path = "{path}"+args[1]
# ワークシートを取得する
sheet = workbook.active
# Excelデータのカラム名を読み込む
column_names = []
for row in sheet.iter_rows(max_row=1, values_only=True):
for column_name in row:
column_names.append(column_name)
# ExcelデータをJSONに変換する
records = []
for row in sheet.iter_rows(min_row=2, values_only=True):
# ここではfor文とかで回したりするほうがもっと賢明ですね~
# まあ、いったんイメージとして書く、、、
record = {
column_names[0]: row[0],
column_names[1]: row[1],
column_names[2]: row[2],
}
records.append(record)
#変換後のファイルを出力
with open("{パス/jsonファイル名}", "w", encoding="utf-8") as output_json:
output_json.writelines(json.dumps(records, ensure_ascii=False))
実行時はこのコマンドで
python convert.py エクセルファイル名
終わりに
今回はopenpyxlの公式サイトを見て各パラメータの意味合いを理解しながらソートコードを作りました!
iter_rows以外には、iter_colsなどカラムを処理する場合のメソッドが用意されていますので、今後はエクセル読み込み時の要件に合わせて適切にメソッドを選定してデータを処理したいと思います~
参考サイト
公式ドキュメントです~