最新国产好看的视频,伊人天堂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 文件,是日常開(kāi)發(fā)中高頻且基礎(chǔ)的需求,本文將介紹如何使用免費(fèi)庫(kù) Free Spire.XLS for Python 完成這一轉(zhuǎn)換任務(wù),并提供處理復(fù)雜嵌套數(shù)據(jù)的實(shí)用方案,希望對(duì)大家有所幫助

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

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

1.1 安裝依賴

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

pip install Spire.XLS.Free

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

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 工作簿/工作表 → 寫(xiě)入表頭與數(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ù)為空,無(wú)法轉(zhuǎn)換")

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

    # 4. 寫(xiě)入數(shù)據(jù)行
    for row_idx, item in enumerate(data, start=2):  # 從第2行開(kāi)始寫(xiě)入數(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()  # 釋放資源

# 測(cè)試調(diào)用
if __name__ == "__main__":
    # 示例JSON字符串(實(shí)際場(chǎng)景可從文件/接口讀?。?
    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ù)寫(xiě)入: 提取第一條 JSON 數(shù)據(jù)的鍵作為 Excel 表頭,使用 item.get(key, "") 避免鍵缺失報(bào)錯(cuò),統(tǒng)一轉(zhuǎn)換為字符串寫(xiě)入(Text 屬性),適配布爾、數(shù)字、字符串等不同數(shù)據(jù)類型。
  • 資源釋放:Dispose() 方法釋放工作簿占用的內(nèi)存,尤其適合批量轉(zhuǎn)換場(chǎng)景。

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

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

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

針對(duì)包含嵌套結(jié)構(gòu)的JSON(如用戶地址信息),需扁平化處理后寫(xiě)入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())

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

    # 寫(xiě)入扁平化后的數(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()

# 測(cè)試嵌套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可讀性,可對(duì)表頭設(shè)置樣式:

# 在寫(xiě)入表頭后添加樣式設(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é)

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了在python中計(jì)算ssim的方法(與Matlab結(jié)果一致),本文通過(guò)實(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對(duì)象的用法

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

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

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

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

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

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

最新評(píng)論

扬中市| 吉安市| 綦江县| 张家川| 锡林郭勒盟| 河南省| 大港区| 玉树县| 鹤庆县| 东方市| 民权县| 南投县| 宁陕县| 宝兴县| 龙岩市| 新余市| 宽城| 永胜县| 广州市| 龙江县| 新宾| 吕梁市| 鄂托克旗| 福海县| 阿巴嘎旗| 新乡县| 高尔夫| 长岭县| 进贤县| 玉门市| 桦甸市| 虎林市| 茶陵县| 松潘县| 新巴尔虎右旗| 江永县| 昌吉市| 灵石县| 大洼县| 炉霍县| 如皋市|