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
相关产品推荐
相关产品推荐

