Python借助Free Spire.XLS for Python实现将JSON转换为Excel

 更新时间:2026年02月26日 15:07:26   作者:m5655bj  
将 JSON 数据结构化转换为 Excel 文件,是日常开发中高频且基础的需求,本文将介绍如何使用免费库 Free Spire.XLS for Python 完成这一转换任务,并提供处理复杂嵌套数据的实用方案,希望对大家有所帮助

在数据处理场景中,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 项目中,适用于数据导出、报表生成等常见业务场景。

到此这篇关于Python借助Free Spire.XLS for Python实现将JSON转换为Excel的文章就介绍到这了,更多相关Python JSON转Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP webshell检查工具 python实现代码

    PHP webshell检查工具 python实现代码

    Web安全应急响应中,不免要检查下服务器上是否被上传了webshell,手工检查比较慢,就写了个脚本来检查了。Windows平台下已经有了lake2写的雷克图的了,一般的检查也够用了,写了个Linux下面的,用python写的。
    2009-09-09
  • 10张动图学会python循环与递归问题

    10张动图学会python循环与递归问题

    今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。代码实例以Python语言编写,非常不错,感兴趣的朋友跟随小编一起学习吧
    2021-02-02
  • 如何使用Python生成4位数的随机数字

    如何使用Python生成4位数的随机数字

    本文讨论了如何使用randint() 和randrange() 方法来生成一个四位数的数字,此外,我们还讨论了另一种拥有随机四位数号码的途径,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Python3写入文件常用方法实例分析

    Python3写入文件常用方法实例分析

    这篇文章主要介绍了Python3写入文件常用方法,以实例形式较为详细分析了常规写入文件方法与改进方法,以及分段写入文件的技巧,需要的朋友可以参考下
    2015-05-05
  • 在python中计算ssim的方法(与Matlab结果一致)

    在python中计算ssim的方法(与Matlab结果一致)

    这篇文章主要介绍了在python中计算ssim的方法(与Matlab结果一致),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 在PyCharm中批量查找及替换的方法

    在PyCharm中批量查找及替换的方法

    今天小编就为大家分享一篇在PyCharm中批量查找及替换的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • WIn10+Anaconda环境下安装PyTorch(避坑指南)

    WIn10+Anaconda环境下安装PyTorch(避坑指南)

    这篇文章主要介绍了WIn10+Anaconda环境下安装PyTorch(避坑指南),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Python实现控制台中的进度条功能代码

    Python实现控制台中的进度条功能代码

    下面小编就为大家分享一篇Python实现控制台中的进度条功能代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python缓存方案优化程序性能提高数据访问速度

    Python缓存方案优化程序性能提高数据访问速度

    Python缓存方案是一种优化程序性能,提高数据访问速度的方案。通过缓存数据,可以减少重复的计算和IO操作,从而提高程序的运行效率。Python中常用的缓存方案包括内存缓存、磁盘缓存和分布式缓存等,根据实际需求选择不同的方案可以帮助我们更好地优化程序性能
    2023-05-05
  • Python中and和or如何使用

    Python中and和or如何使用

    在本篇文章里小编给各位分享的是一篇关于Python中and、or用法实例文章,有兴趣的朋友们可以参考学习下。
    2020-05-05

最新评论