博客 / 詳情

返回

【Python 教程】如何將 JSON 數據轉換為 Excel 工作表

在數據處理場景中,JSON 作為輕量級數據交換格式被廣泛使用,而 Excel 則是業務分析、數據交付的核心載體。將 JSON 數據結構化轉換為 Excel 文件,是日常開發中高頻且基礎的需求。本文將介紹如何使用免費庫 Free Spire.XLS for Python 完成這一轉換任務,並提供處理複雜嵌套數據的實用方案。

一、環境準備

1.1 安裝依賴

在開始編碼之前,需要安裝必要的庫。Free Spire.XLS for Python 是一個獨立的 Excel 操作庫,無需本地安裝 Microsoft Office 即可創建和編輯 Excel 文件。通過 pip 安裝非常簡單:

pip install Spire.XLS.Free

安裝完成後,無需額外配置,即可在代碼中引入並使用核心類庫。

1.2 數據準備

本文以典型的結構化JSON數據為例(用户信息列表),示例JSON如下:

[
    {
        "id": 1001,
        "name": "張三",
        "age": 28,
        "email": "zhangsan@example.com",
        "is_active": true
    },
    {
        "id": 1002,
        "name": "李四",
        "age": 32,
        "email": "lisi@example.com",
        "is_active": false
    },
    {
        "id": 1003,
        "name": "王五",
        "age": 25,
        "email": "wangwu@example.com",
        "is_active": true
    }
]

二、基礎實現:JSON 轉 Excel 核心流程

核心思路為:解析 JSON 數據 → 創建 Excel 工作簿/工作表 → 寫入表頭與數據 → 保存文件。以下是完整實現代碼:

import json
from spire.xls import *
from spire.xls.common import *

def json_to_excel_basic(json_data, output_path):
    # 1. 初始化Excel工作簿
    workbook = Workbook()
    # 移除默認工作表,創建新工作表
    workbook.Worksheets.Clear()
    worksheet = workbook.Worksheets.Add("用户數據")

    # 2. 解析JSON數據(若為文件讀取,可替換為json.load(open("data.json", "r", encoding="utf-8")))
    data = json.loads(json_data)
    if not data:
        raise ValueError("JSON數據為空,無法轉換")

    # 3. 寫入表頭(取第一條數據的鍵作為表頭)
    headers = list(data[0].keys())
    for col_idx, header in enumerate(headers):
        worksheet.Range[1, col_idx + 1].Text = header

    # 4. 寫入數據行
    for row_idx, item in enumerate(data, start=2):  # 從第2行開始寫入數據
        for col_idx, key in enumerate(headers):
            value = item.get(key, "")
            worksheet.Range[row_idx, col_idx + 1].Text = str(value)

    # 5. 自動調整列寬
    worksheet.AllocatedRange.AutoFitColumns()

    # 6. 保存Excel文件
    workbook.SaveToFile(output_path, ExcelVersion.Version2016)
    workbook.Dispose()  # 釋放資源

# 測試調用
if __name__ == "__main__":
    # 示例JSON字符串(實際場景可從文件/接口讀取)
    json_str = '''
    [
        {"id": 1001, "name": "張三", "age": 28, "email": "zhangsan@example.com", "is_active": true},
        {"id": 1002, "name": "李四", "age": 32, "email": "lisi@example.com", "is_active": false},
        {"id": 1003, "name": "王五", "age": 25, "email": "wangwu@example.com", "is_active": true}
    ]
    '''
    try:
        json_to_excel_basic(json_str, "基礎版JSON轉Excel.xlsx")
        print("轉換完成!")
    except Exception as e:
        print(f"轉換失敗:{e}")

關鍵代碼解析

  1. 工作簿初始化Workbook() 創建空工作簿,Worksheets.Clear() 移除默認工作表,避免冗餘;
  2. 數據解析:使用 Python 內置 json 模塊解析數據,兼容字符串/文件兩種輸入方式;
  3. 表頭與數據寫入: 提取第一條 JSON 數據的鍵作為 Excel 表頭,使用 item.get(key, "") 避免鍵缺失報錯,統一轉換為字符串寫入(Text 屬性),適配布爾、數字、字符串等不同數據類型。
  4. 資源釋放Dispose() 方法釋放工作簿佔用的內存,尤其適合批量轉換場景。

三、進階優化:提升轉換質量與健壯性

基礎版本滿足核心需求,但實際場景中需處理嵌套JSON、樣式美化等問題,以下是優化方案。

3.1 處理嵌套 JSON 數據

針對包含嵌套結構的JSON(如用户地址信息),需扁平化處理後寫入Excel:

import json
from spire.xls import *
from spire.xls.common import *

def flatten_dict(d, parent_key='', sep='_'):
    """遞歸扁平化嵌套字典"""
    items = []
    for k, v in d.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        if isinstance(v, dict):
            items.extend(flatten_dict(v, new_key, sep=sep).items())
        else:
            items.append((new_key, v))
    return dict(items)

def json_to_excel_nested(json_data, output_path):
    workbook = Workbook()
    workbook.Worksheets.Clear()
    worksheet = workbook.Worksheets.Add("嵌套JSON數據")

    data = json.loads(json_data)
    if not data:
        raise ValueError("JSON數據為空")

    # 扁平化所有數據,提取完整表頭
    flattened_data = [flatten_dict(item) for item in data]
    headers = list(flattened_data[0].keys())

    # 寫入表頭
    for col_idx, header in enumerate(headers):
        worksheet.Range[1, col_idx + 1].Text = header

    # 寫入扁平化後的數據
    for row_idx, item in enumerate(flattened_data, start=2):
        for col_idx, key in enumerate(headers):
            worksheet.Range[row_idx, col_idx + 1].Text = str(item.get(key, ""))

    # 自動列寬
    worksheet.AllocatedRange.AutoFitColumns()
    # 保存文件
    workbook.SaveToFile(output_path, ExcelVersion.Version2016)
    workbook.Dispose()

# 測試嵌套JSON轉換
if __name__ == "__main__":
    nested_json = '''
    [
        {
            "id": 1001,
            "name": "張三",
            "age": 28,
            "contact": {
                "email": "zhangsan@example.com",
                "phone": "13800138000"
            },
            "address": {
                "province": "北京",
                "city": "北京市"
            }
        },
        {
            "id": 1002,
            "name": "李四",
            "age": 32,
            "contact": {
                "email": "lisi@example.com",
                "phone": "13900139000"
            },
            "address": {
                "province": "上海",
                "city": "上海市"
            }
        }
    ]
    '''
    try:
        json_to_excel_nested(nested_json, "嵌套JSON轉Excel.xlsx")
        print("嵌套JSON轉換完成!")
    except Exception as e:
        print(f"轉換失敗:{e}")

3.2 美化 Excel 樣式(表頭高亮、字體設置)

為提升Excel可讀性,可對錶頭設置樣式:

# 在寫入表頭後添加樣式設置代碼
header_range = worksheet.Range[1, 1, 1, len(headers)]
# 設置表頭背景色
header_range.Style.Color = Color.get_SkyBlue()
# 設置表頭字體加粗
header_range.Style.Font.IsBold = True
# 設置表頭文字居中
header_range.Style.HorizontalAlignment = HorizontalAlignType.Center

四、總結

通過結合 Python 內置的 json 模塊和 Free Spire.XLS for Python 庫,我們可以高效地將 JSON 數據轉換為結構化的 Excel 文件。核心要點如下:

  1. 基礎流程:解析 JSON → 創建 Excel 工作簿 → 寫入表頭/數據 → 保存文件,關鍵是適配 Excel 的 1 起始索引;
  2. 進階優化:通過遞歸扁平化處理嵌套 JSON,通過樣式設置提升 Excel 可讀性;
  3. 最佳實踐:轉換前校驗 JSON 數據有效性,轉換後調用 Dispose() 釋放工作簿資源。

該方案無需依賴 Office 組件,輕量化且易於集成到 Python 項目中,適用於數據導出、報表生成等常見業務場景。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.