1. 背景
データ処理やシステム統合のシーンにおいて、Excel と JSON は非常に一般的なデータ形式です。Excel は直感的な表形式と幅広い互換性により、業務データの収集・審査・共有で長年にわたり主流の位置を占めてきました。一方、JSON は軽量で構造が柔軟な特徴から、Web アプリケーション、REST API、システム間のデータ交換でより頻繁に利用されています。そのため、Excel データを JSON にエクスポートすることは、人手で管理された表形式データから機械可読な形式への移行における一般的なニーズとなっています。
本記事では、無償ライブラリである Free Spire.XLS for Python を使用して、Excel から JSON へのエクスポートを実装する方法を紹介します。このライブラリは Microsoft Excel をインストールしなくても .xls、.xlsx などの Excel ファイルを読み書きでき、サーバー環境や自動化タスクに適しています。
2. 環境準備
2.1 インストール
無償の Python ライブラリは pip で直接インストールできます:
pip install spire.xls.free
このライブラリは Python 3.6 以降に対応しており、Windows、Linux、macOS で動作します。
2.2 インポート方法
コード内で必要なモジュールをインポートします:
from spire.xls import Workbook, FileFormat
import json
3. Excel から JSON への変換実装方法
3.1 方法一:ワークブック全体を直接 JSON に変換
Spire.XLS for Python 16.7.1 以降では、Excel ワークブックを JSON 形式で直接保存する機能がネイティブサポートされています。これは最も簡潔な方法です:
from spire.xls import Workbook, FileFormat
import os
input_file = "販売データ.xlsx"
output_file = "output/ワークブック.json"
os.makedirs("output", exist_ok=True)
workbook = Workbook()
workbook.LoadFromFile(input_file)
workbook.SaveToFile(output_file, FileFormat.Json)
workbook.Dispose()
実行後、生成される JSON では、各ワークシート名がトップレベルのキーとなり、ワークシートの1行目の見出しが JSON のプロパティ名に変換され、後続の各行のデータが JSON オブジェクトに変換されます。例えば、「販売データ」というワークシートを含む Excel ファイルの場合、生成される JSON 構造はおおよそ次のようになります:
{
"販売データ": [
{
"注文番号": "SO-1001",
"顧客名": "北方科技有限公司",
"製品名": "ノートパソコンスタンド",
"数量": 3,
"単価": 349,
"注文ステータス": "完了"
}
]
}
ワークブックに複数のワークシートが含まれる場合、各ワークシートは同じ JSON ファイル内で独立したトップレベルのキーに対応します。
3.2 方法二:指定したワークシートを JSON にエクスポート(無料版対応)
特定のワークシートのみをエクスポートしたい場合は、まず該当するワークシートを取得し、手動で JSON データを構築します:
from spire.xls import Workbook
import json
workbook = Workbook()
workbook.LoadFromFile("販売データ.xlsx")
# 最初のワークシートを取得
sheet = workbook.Worksheets[0]
# 最大行・列数を取得
rows = sheet.LastRow
cols = sheet.LastColumn
# ヘッダー(1行目)を抽出
headers = [sheet.Range[1, i + 1].Text for i in range(cols)]
# 行ごとに JSON データを構築
data = []
for r in range(2, rows + 1):
row_dict = {}
for c in range(1, cols + 1):
row_dict[headers[c - 1]] = sheet.Range[r, c].Text
data.append(row_dict)
# JSON ファイルに書き込み
with open("指定ワークシート.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
workbook.Dispose()
3.3 方法三:指定したセル範囲を JSON にエクスポート(無料版対応)
Excel 内の特定のセル範囲のみをエクスポートする必要がある場合は、Worksheet.Range[] を使用して対象範囲を取得します:
from spire.xls import Workbook
import json
workbook = Workbook()
workbook.LoadFromFile("販売データ.xlsx")
sheet = workbook.Worksheets[0]
# 指定したセル範囲を取得(例:A1 から D10)
target_range = sheet.Range["A1:D10"]
# 範囲の行数・列数を取得
rows = target_range.LastRow - target_range.FirstRow + 1
cols = target_range.LastColumn - target_range.FirstColumn + 1
# ヘッダーを抽出
headers = [target_range[1, i + 1].Text for i in range(cols)]
# データを抽出
data = []
for r in range(2, rows + 1):
row_dict = {}
for c in range(1, cols + 1):
row_dict[headers[c - 1]] = target_range[r, c].Text
data.append(row_dict)
with open("指定範囲.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
workbook.Dispose()
以上の例は、Microsoft Excel に依存せずに Excel データを JSON にエクスポートするソリューションを提供します。中規模以下のデータ処理ニーズ、特に GUI のないサーバー環境で動作させる必要があるシーンにおいて、検討に値する選択肢です。ユーザーは実際の要件に応じて、ワークブック全体の直接変換、指定ワークシートや範囲のエクスポートなど、異なる方法を選択できます。