Python读取JSON写入Excel时遇ValueError问题求助
问题解决:无法将值写入Excel单元格
错误原因
ValueError: Cannot convert {0!r} to Excel 说明你要写入的 hui['price'] 的数据类型是openpyxl不支持的(比如None、列表、字典,或者格式异常的字符串),Excel单元格无法直接存储这类数据。另外你原代码还有个隐藏问题:循环中没有自增行号,所有数据会覆盖同一单元格。
排查与解决步骤
先确认问题数据
在赋值前打印hui['price']的具体值和类型,定位异常数据:row = 2 for hui in movie['3']: print(f"price值: {hui['price']}, 类型: {type(hui['price'])}") sheet[row][0].value = hui['price'] row += 1针对性处理数据
根据打印结果,把不支持的类型转成Excel可识别的格式:- 若为
None:转成空字符串'' - 若为列表/字典:用
json.dumps()序列化为字符串 - 若为字符串格式的数字:转成
int或float - 其他情况:直接转成字符串
- 若为
修复后的完整代码
from openpyxl import Workbook import json book = Workbook() sheet = book.active with open('cs3.json', 'r', encoding='utf-8') as file: movie = json.load(file) row = 2 for hui in movie['3']: price = hui['price'] # 处理不兼容的数据类型 if price is None: cell_value = '' elif isinstance(price, (list, dict)): cell_value = json.dumps(price, ensure_ascii=False) else: # 尝试转成数值,失败则保留字符串 try: cell_value = float(price) if '.' in str(price) else int(price) except (ValueError, TypeError): cell_value = str(price) sheet[row][0].value = cell_value row += 1 # 必须自增行号,避免覆盖数据 book.save("my_gulag.xlsx") book.close()
内容的提问来源于stack exchange,提问作者Coffeeinthebrain 1
相关产品推荐
相关产品推荐

