Python借助Free Spire.XLS for Python實(shí)現(xiàn)將JSON轉(zhuǎn)換為Excel
在數(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)文章希望大家以后多多支持腳本之家!
- 基于Python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為JSON格式
- Python實(shí)現(xiàn)將txt里面多行json字符串轉(zhuǎn)成excel文件
- 使用Python將JSON格式的假期數(shù)據(jù)轉(zhuǎn)換為Excel文件
- Python進(jìn)行JSON和Excel文件轉(zhuǎn)換處理指南
- Python打造Excel與JSON轉(zhuǎn)換工具全攻略(從開(kāi)發(fā)到打包)
- python實(shí)現(xiàn)將Excel文件轉(zhuǎn)換為JSON文件
- python實(shí)現(xiàn)讀取Excel內(nèi)容并展示成json
相關(guān)文章
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),特別是在涉及到數(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é)果一致),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
從源碼解析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)行的解決方法,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

