You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Excel转JSON文件:生成对应表名JSON文件报错求助

解决Excel表名对应JSON导出为文件的问题

问题场景

  • Excel文件Schema_update_Tracker.xlsx的osiris工作表中,第2列是表名,第3列是对应表的JSON格式结构
  • 需要将每行的表名作为文件名,对应列的JSON内容保存为[表名].json文件

原代码问题分析

出现TypeError: write() argument must be str, not None的核心原因:

  • 重复加载Excel文件,造成冗余操作
  • 内层循环遍历所有行,最终row_data被覆盖为非目标列的值甚至空值
  • 未建立表名与对应JSON内容的关联逻辑,导致写入时data为None
  • 临时文件重命名的逻辑混乱,易引发文件覆盖或错误

修正后的代码

import os
import openpyxl

# 仅加载一次Excel文件
wb = openpyxl.load_workbook('C:/Users/tamil/downloads/Schema_update_Tracker.xlsx')
sheet = wb['osiris']  # 更简洁的工作表调用方式

# 定义目标行范围(表头在第1行,数据从第2行到136行)
start_row = 2
end_row = 136

# 遍历每行,同步获取表名和对应JSON内容
for row in range(start_row, end_row + 1):
    # 获取第2列的表名
    table_name = sheet.cell(row=row, column=2).value
    # 获取相邻第3列的JSON内容
    json_content = sheet.cell(row=row, column=3).value
    
    # 跳过表名或JSON为空的无效行
    if not table_name or not json_content:
        continue
    
    # 直接以表名为文件名写入内容
    file_path = f"{table_name}.json"
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(json_content)

print("所有JSON文件已生成完成")

关键优化点

  • 单次加载Excel,提升运行效率
  • 直接关联每行的表名与对应JSON内容,避免数据错位
  • 增加空值检查,跳过无效行,彻底解决None写入报错问题
  • 直接使用表名作为文件名写入,无需临时文件重命名
  • 指定encoding='utf-8',避免中文或特殊字符的编码异常

内容的提问来源于stack exchange,提问作者Gowtham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:50:20