在数据处理场景中,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}")
复制代码 关键代码解析
- 工作簿初始化:Workbook() 创建空工作簿,Worksheets.Clear() 移除默认工作表,避免冗余;
- 数据解析:使用 Python 内置 json 模块解析数据,兼容字符串/文件两种输入方式;
- 表头与数据写入: 提取第一条 JSON 数据的键作为 Excel 表头,使用 item.get(key, "") 避免键缺失报错,统一转换为字符串写入(Text 属性),适配布尔、数字、字符串等不同数据类型。
- 资源释放: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 文件。核心要点如下:
- 基础流程:解析 JSON → 创建 Excel 工作簿 → 写入表头/数据 → 保存文件,关键是适配 Excel 的 1 起始索引;
- 进阶优化:通过递归扁平化处理嵌套 JSON,通过样式设置提升 Excel 可读性;
- 最佳实践:转换前校验 JSON 数据有效性,转换后调用 Dispose() 释放工作簿资源。
该方案无需依赖 Office 组件,轻量化且易于集成到 Python 项目中,适用于数据导出、报表生成等常见业务场景。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |