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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python自制一个文件解压缩小工具

    基于Python自制一个文件解压缩小工具

    经常在办公的过程中会遇到各种各样的压缩文件处理,但是呢每个压缩软件支持的格式又是不同的。本文就来用Python自制一个文件解压缩小工具,可以支持7z/zip/rar三种格式,希望对大家有所帮助
    2023-02-02
  • python获取指定目录下所有文件名列表的方法

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

    这篇文章主要介绍了python获取指定目录下所有文件名列表的方法,涉及Python目录及文件操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python中的Request请求重试机制

    Python中的Request请求重试机制

    这篇文章主要介绍了Python中的Request请求重试机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • cython加速python代码的方法实现

    cython加速python代码的方法实现

    本文主要介绍了cython加速python代码的方法实现,特别是在涉及到数值计算密集型任务时,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 在python中计算ssim的方法(与Matlab结果一致)

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

    这篇文章主要介绍了在python中计算ssim的方法(与Matlab结果一致),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python 获得13位unix时间戳的方法

    Python 获得13位unix时间戳的方法

    本篇文章主要介绍了Python 获得13位unix时间戳的方法,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • PyQt5每天必学之像素图控件QPixmap

    PyQt5每天必学之像素图控件QPixmap

    这篇文章主要为大家详细介绍了PyQt5每天必学之像素图控件QPixmap,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 从源码解析Python的Flask框架中request对象的用法

    从源码解析Python的Flask框架中request对象的用法

    Flask中的request对象发送请求使用起来十分方便,但也有一些需要注意的地方,这里我们来从源码解析Python的Flask框架中request对象的用法,需要的朋友可以参考下.
    2016-06-06
  • 基于多进程中APScheduler重复运行的解决方法

    基于多进程中APScheduler重复运行的解决方法

    今天小编就为大家分享一篇基于多进程中APScheduler重复运行的解决方法,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python清空Word段落样式的三种方法

    Python清空Word段落样式的三种方法

    这篇文章主要介绍了如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重置样式或清除格式,复杂文档需递归处理,建议备份并按需选择方法,需要的朋友可以参考下
    2025-08-08

最新评论