0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python を使用して Excel を JSON にエクスポートする

0
Posted at

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 のないサーバー環境で動作させる必要があるシーンにおいて、検討に値する選択肢です。ユーザーは実際の要件に応じて、ワークブック全体の直接変換、指定ワークシートや範囲のエクスポートなど、異なる方法を選択できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?