奔跑的思想 發表於 2026-3-5 13:49:00

【Python 教程】如何将 JSON 数据转换为 Excel 工作表

<p>在数据处理场景中,JSON 作为轻量级数据交换格式被广泛使用,而 Excel 则是业务分析、数据交付的核心载体。将 JSON 数据结构化转换为 Excel 文件,是日常开发中高频且基础的需求。本文将介绍如何使用免费库 Free Spire.XLS for Python 完成这一转换任务,并提供处理复杂嵌套数据的实用方案。</p>
<h2 id="一环境准备">一、环境准备</h2>
<h3 id="11-安装依赖">1.1 安装依赖</h3>
<p>在开始编码之前,需要安装必要的库。Free Spire.XLS for Python 是一个独立的 Excel 操作库,无需本地安装 Microsoft Office 即可创建和编辑 Excel 文件。通过 pip 安装非常简单:</p>
<pre><code class="language-bash">pip install Spire.XLS.Free
</code></pre>
<p>安装完成后,无需额外配置,即可在代码中引入并使用核心类库。</p>
<h3 id="12-数据准备">1.2 数据准备</h3>
<p>本文以典型的结构化JSON数据为例(用户信息列表),示例JSON如下:</p>
<pre><code class="language-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
    }
]
</code></pre>
<h2 id="二基础实现json-转-excel-核心流程">二、基础实现:JSON 转 Excel 核心流程</h2>
<p>核心思路为:解析 JSON 数据 → 创建 Excel 工作簿/工作表 → 写入表头与数据 → 保存文件。以下是完整实现代码:</p>
<pre><code class="language-python">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.keys())
    for col_idx, header in enumerate(headers):
      worksheet.Range.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.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}")
</code></pre>
<h3 id="关键代码解析">关键代码解析</h3>
<ol>
<li><strong>工作簿初始化</strong>:<code>Workbook()</code> 创建空工作簿,<code>Worksheets.Clear()</code> 移除默认工作表,避免冗余;</li>
<li><strong>数据解析</strong>:使用 Python 内置 <code>json</code> 模块解析数据,兼容字符串/文件两种输入方式;</li>
<li><strong>表头与数据写入</strong>: 提取第一条 JSON 数据的键作为 Excel 表头,使用 <code>item.get(key, "")</code> 避免键缺失报错,统一转换为字符串写入(<code>Text</code> 属性),适配布尔、数字、字符串等不同数据类型。</li>
<li><strong>资源释放</strong>:<code>Dispose()</code> 方法释放工作簿占用的内存,尤其适合批量转换场景。</li>
</ol>
<h2 id="三进阶优化提升转换质量与健壮性">三、进阶优化:提升转换质量与健壮性</h2>
<p>基础版本满足核心需求,但实际场景中需处理嵌套JSON、样式美化等问题,以下是优化方案。</p>
<h3 id="31-处理嵌套-json-数据">3.1 处理嵌套 JSON 数据</h3>
<p>针对包含嵌套结构的JSON(如用户地址信息),需扁平化处理后写入Excel:</p>
<pre><code class="language-python">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 =
    headers = list(flattened_data.keys())

    # 写入表头
    for col_idx, header in enumerate(headers):
      worksheet.Range.Text = header

    # 写入扁平化后的数据
    for row_idx, item in enumerate(flattened_data, start=2):
      for col_idx, key in enumerate(headers):
            worksheet.Range.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}")
</code></pre>
<h3 id="32-美化-excel-样式表头高亮字体设置">3.2 美化 Excel 样式(表头高亮、字体设置)</h3>
<p>为提升Excel可读性,可对表头设置样式:</p>
<pre><code class="language-python"># 在写入表头后添加样式设置代码
header_range = worksheet.Range
# 设置表头背景色
header_range.Style.Color = Color.get_SkyBlue()
# 设置表头字体加粗
header_range.Style.Font.IsBold = True
# 设置表头文字居中
header_range.Style.HorizontalAlignment = HorizontalAlignType.Center
</code></pre>
<h2 id="四总结">四、总结</h2>
<p>通过结合 Python 内置的 <code>json</code> 模块和 Free Spire.XLS for Python 库,我们可以高效地将 JSON 数据转换为结构化的 Excel 文件。核心要点如下:</p>
<ol>
<li><strong>基础流程</strong>:解析 JSON → 创建 Excel 工作簿 → 写入表头/数据 → 保存文件,关键是适配 Excel 的 1 起始索引;</li>
<li><strong>进阶优化</strong>:通过递归扁平化处理嵌套 JSON,通过样式设置提升 Excel 可读性;</li>
<li><strong>最佳实践</strong>:转换前校验 JSON 数据有效性,转换后调用 <code>Dispose()</code> 释放工作簿资源。</li>
</ol>
<p>该方案无需依赖 Office 组件,轻量化且易于集成到 Python 项目中,适用于数据导出、报表生成等常见业务场景。</p><br><br>
来源:https://www.cnblogs.com/jazz-z/p/19672608
頁: [1]
查看完整版本: 【Python 教程】如何将 JSON 数据转换为 Excel 工作表