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

Python读取JSON写入Excel时遇ValueError问题求助

问题解决:无法将值写入Excel单元格

错误原因

ValueError: Cannot convert {0!r} to Excel 说明你要写入的 hui['price'] 的数据类型是openpyxl不支持的(比如None、列表、字典,或者格式异常的字符串),Excel单元格无法直接存储这类数据。另外你原代码还有个隐藏问题:循环中没有自增行号,所有数据会覆盖同一单元格。

排查与解决步骤

  1. 先确认问题数据
    在赋值前打印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
    
  2. 针对性处理数据
    根据打印结果,把不支持的类型转成Excel可识别的格式:

    • 若为None:转成空字符串''
    • 若为列表/字典:用json.dumps()序列化为字符串
    • 若为字符串格式的数字:转成int或float
    • 其他情况:直接转成字符串
  3. 修复后的完整代码

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:35:27