最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python借助Free Spire.XLS for Python實(shí)現(xiàn)將JSON轉(zhuǎn)換為Excel

 更新時(shí)間:2026年02月26日 15:07:26   作者:m5655bj  
將 JSON 數(shù)據(jù)結(jié)構(gòu)化轉(zhuǎn)換為 Excel 文件,是日常開發(fā)中高頻且基礎(chǔ)的需求,本文將介紹如何使用免費(fèi)庫 Free Spire.XLS for Python 完成這一轉(zhuǎn)換任務(wù),并提供處理復(fù)雜嵌套數(shù)據(jù)的實(shí)用方案,希望對大家有所幫助

在數(shù)據(jù)處理場景中,JSON 作為輕量級數(shù)據(jù)交換格式被廣泛使用,而 Excel 則是業(yè)務(wù)分析、數(shù)據(jù)交付的核心載體。將 JSON 數(shù)據(jù)結(jié)構(gòu)化轉(zhuǎn)換為 Excel 文件,是日常開發(fā)中高頻且基礎(chǔ)的需求。本文將介紹如何使用免費(fèi)庫 Free Spire.XLS for Python 完成這一轉(zhuǎn)換任務(wù),并提供處理復(fù)雜嵌套數(shù)據(jù)的實(shí)用方案。

一、環(huán)境準(zhǔn)備

1.1 安裝依賴

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

pip install Spire.XLS.Free

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

1.2 數(shù)據(jù)準(zhǔn)備

本文以典型的結(jié)構(gòu)化JSON數(shù)據(jù)為例(用戶信息列表),示例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
    }
]

二、基礎(chǔ)實(shí)現(xiàn):JSON 轉(zhuǎn) Excel 核心流程

核心思路為:解析 JSON 數(shù)據(jù) → 創(chuàng)建 Excel 工作簿/工作表 → 寫入表頭與數(shù)據(jù) → 保存文件。

以下是完整實(shí)現(xiàn)代碼:

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

def json_to_excel_basic(json_data, output_path):
    # 1. 初始化Excel工作簿
    workbook = Workbook()
    # 移除默認(rèn)工作表,創(chuàng)建新工作表
    workbook.Worksheets.Clear()
    worksheet = workbook.Worksheets.Add("用戶數(shù)據(jù)")

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

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

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

    # 5. 自動(dòng)調(diào)整列寬
    worksheet.AllocatedRange.AutoFitColumns()

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

# 測試調(diào)用
if __name__ == "__main__":
    # 示例JSON字符串(實(shí)際場景可從文件/接口讀?。?
    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, "基礎(chǔ)版JSON轉(zhuǎn)Excel.xlsx")
        print("轉(zhuǎn)換完成!")
    except Exception as e:
        print(f"轉(zhuǎn)換失敗:{e}")

關(guān)鍵代碼解析

  • 工作簿初始化:Workbook() 創(chuàng)建空工作簿,Worksheets.Clear() 移除默認(rèn)工作表,避免冗余;
  • 數(shù)據(jù)解析:使用 Python 內(nèi)置 json 模塊解析數(shù)據(jù),兼容字符串/文件兩種輸入方式;
  • 表頭與數(shù)據(jù)寫入: 提取第一條 JSON 數(shù)據(jù)的鍵作為 Excel 表頭,使用 item.get(key, "") 避免鍵缺失報(bào)錯(cuò),統(tǒng)一轉(zhuǎn)換為字符串寫入(Text 屬性),適配布爾、數(shù)字、字符串等不同數(shù)據(jù)類型。
  • 資源釋放:Dispose() 方法釋放工作簿占用的內(nèi)存,尤其適合批量轉(zhuǎn)換場景。

三、進(jìn)階優(yōu)化:提升轉(zhuǎn)換質(zhì)量與健壯性

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

3.1 處理嵌套 JSON 數(shù)據(jù)

針對包含嵌套結(jié)構(gòu)的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數(shù)據(jù)")

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

    # 扁平化所有數(shù)據(jù),提取完整表頭
    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

    # 寫入扁平化后的數(shù)據(jù)
    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, ""))

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

# 測試嵌套JSON轉(zhuǎn)換
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轉(zhuǎn)Excel.xlsx")
        print("嵌套JSON轉(zhuǎn)換完成!")
    except Exception as e:
        print(f"轉(zhuǎn)換失?。簕e}")

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

為提升Excel可讀性,可對表頭設(shè)置樣式:

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

四、總結(jié)

通過結(jié)合 Python 內(nèi)置的 json 模塊和 Free Spire.XLS for Python 庫,我們可以高效地將 JSON 數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化的 Excel 文件。核心要點(diǎn)如下:

  • 基礎(chǔ)流程:解析 JSON → 創(chuàng)建 Excel 工作簿 → 寫入表頭/數(shù)據(jù) → 保存文件,關(guān)鍵是適配 Excel 的 1 起始索引;
  • 進(jìn)階優(yōu)化:通過遞歸扁平化處理嵌套 JSON,通過樣式設(shè)置提升 Excel 可讀性;
  • 最佳實(shí)踐:轉(zhuǎn)換前校驗(yàn) JSON 數(shù)據(jù)有效性,轉(zhuǎn)換后調(diào)用 Dispose() 釋放工作簿資源。

該方案無需依賴 Office 組件,輕量化且易于集成到 Python 項(xiàng)目中,適用于數(shù)據(jù)導(dǎo)出、報(bào)表生成等常見業(yè)務(wù)場景。

到此這篇關(guān)于Python借助Free Spire.XLS for Python實(shí)現(xiàn)將JSON轉(zhuǎn)換為Excel的文章就介紹到這了,更多相關(guān)Python JSON轉(zhuǎn)Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python自制一個(gè)文件解壓縮小工具

    基于Python自制一個(gè)文件解壓縮小工具

    經(jīng)常在辦公的過程中會(huì)遇到各種各樣的壓縮文件處理,但是呢每個(gè)壓縮軟件支持的格式又是不同的。本文就來用Python自制一個(gè)文件解壓縮小工具,可以支持7z/zip/rar三種格式,希望對大家有所幫助
    2023-02-02
  • python獲取指定目錄下所有文件名列表的方法

    python獲取指定目錄下所有文件名列表的方法

    這篇文章主要介紹了python獲取指定目錄下所有文件名列表的方法,涉及Python目錄及文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python中的Request請求重試機(jī)制

    Python中的Request請求重試機(jī)制

    這篇文章主要介紹了Python中的Request請求重試機(jī)制,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • cython加速python代碼的方法實(shí)現(xiàn)

    cython加速python代碼的方法實(shí)現(xiàn)

    本文主要介紹了cython加速python代碼的方法實(shí)現(xiàn),特別是在涉及到數(shù)值計(jì)算密集型任務(wù)時(shí),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 在python中計(jì)算ssim的方法(與Matlab結(jié)果一致)

    在python中計(jì)算ssim的方法(與Matlab結(jié)果一致)

    這篇文章主要介紹了在python中計(jì)算ssim的方法(與Matlab結(jié)果一致),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python 獲得13位unix時(shí)間戳的方法

    Python 獲得13位unix時(shí)間戳的方法

    本篇文章主要介紹了Python 獲得13位unix時(shí)間戳的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • PyQt5每天必學(xué)之像素圖控件QPixmap

    PyQt5每天必學(xué)之像素圖控件QPixmap

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之像素圖控件QPixmap,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 從源碼解析Python的Flask框架中request對象的用法

    從源碼解析Python的Flask框架中request對象的用法

    Flask中的request對象發(fā)送請求使用起來十分方便,但也有一些需要注意的地方,這里我們來從源碼解析Python的Flask框架中request對象的用法,需要的朋友可以參考下.
    2016-06-06
  • 基于多進(jìn)程中APScheduler重復(fù)運(yùn)行的解決方法

    基于多進(jìn)程中APScheduler重復(fù)運(yùn)行的解決方法

    今天小編就為大家分享一篇基于多進(jìn)程中APScheduler重復(fù)運(yùn)行的解決方法,具有很好的價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python清空Word段落樣式的三種方法

    Python清空Word段落樣式的三種方法

    這篇文章主要介紹了如何用python-docx庫清空Word段落樣式,提供三種方法:設(shè)置為Normal樣式、清除直接格式、創(chuàng)建新Normal樣式,注意需重置樣式或清除格式,復(fù)雜文檔需遞歸處理,建議備份并按需選擇方法,需要的朋友可以參考下
    2025-08-08

最新評論

新绛县| 都昌县| 湘潭市| 望奎县| 清远市| 湘潭县| 新龙县| 绥江县| 青铜峡市| 专栏| 集安市| 娱乐| 遂溪县| 瑞昌市| 德阳市| 视频| 乐至县| 如皋市| 辽源市| 措勤县| 海伦市| 迁安市| 朝阳市| 叙永县| 台北县| 定边县| 平和县| 集贤县| 东乌珠穆沁旗| 东源县| 文昌市| 从化市| 镇远县| 唐河县| 营口市| 黑水县| 竹山县| 阿瓦提县| 宣威市| 新余市| 密山市|