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

使用openpyxl从多Excel文件读取数据存入字典时遇AttributeError及数据汇总异常问题求助

使用openpyxl从多Excel文件读取数据存入字典时遇AttributeError及数据汇总异常问题求助

嗨,我看到你遇到的问题了,咱们一步步来拆解和解决它~

你现在碰到两个核心问题:一是用.append(total_sales)时会触发AttributeError,二是换成+=total_sales后,得到的是三个月的销售总和,而非每个月的独立数据。这两个问题其实根源是同一个——第一次给字典的键赋值时,你存的是单个数值,而不是列表类型。

错误原因拆解

  • 当某个商品(item)第一次出现在Excel里时,你执行了data[item] = total_sales,这时候data[item]是一个数值(比如整数或浮点数),而数值类型根本没有append()方法,所以后续再处理这个商品时,调用.append()自然会报错。
  • 如果你换成+=total_sales,本质是把两个数值相加,每次处理都会累加当前月份的销售额,最后得到的自然是三个月的总和,而非每个月的单独数据。

修正方案

我们需要确保字典中每个键对应的值始终是列表类型:

  1. 第一次遇到某个商品时,把当前月份的销售额放进一个新列表里,作为该键的值;
  2. 后续再遇到这个商品时,直接往对应的列表里追加新月份的销售额即可。
    另外还要注意:原代码里函数定义后的代码没有缩进,这在Python里是语法错误,必须修正缩进才能正常运行。

修正后的完整代码

import openpyxl

# juste recuperer les valeurs pas les formules "data_only=True"
wb1 = openpyxl.load_workbook("octobre.xlsx", data_only=True)
wb2 = openpyxl.load_workbook("novembre.xlsx", data_only=True)
wb3 = openpyxl.load_workbook("decembre.xlsx", data_only=True)

def add_data_from_wb(wb, data):
    # 修复缩进:函数内的代码必须缩进,Python靠缩进识别代码块
    sheet = wb.active
    for row in range(2, sheet.max_row):
        item = sheet.cell(row, 1).value
        if not item:
            break
        total_sales = sheet.cell(row, 4).value
        if data.get(item):
            data[item].append(total_sales)
        else:
            # 初始化时存入列表,而非单个数值
            data[item] = [total_sales]

data_dict = {}
add_data_from_wb(wb1, data_dict)
add_data_from_wb(wb2, data_dict)
add_data_from_wb(wb3, data_dict)

print(data_dict)

修改后,每个商品对应的字典值都会是一个列表,按顺序存放十月、十一月、十二月的销售数据,既不会报错,也能保留每个月的独立数据啦~

备注:内容来源于stack exchange,提问作者LetoD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:28:00