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

使用openpyxl报错AttributeError: 'str'对象无'row'属性,求排查

错误原因与修复方案

问题根源

你调用worksheet.iter_rows()时传入了values_only=True参数,这个参数会让迭代返回的每一行是单元格值组成的元组(比如字符串、数字),而非单元格对象。所以object_row[0]是单元格里的字符串内容,自然没有.row属性,这就是AttributeError的原因。

修复方法(两种可选)

方法一:移除values_only=True,直接操作单元格对象

这种方式保留原逻辑结构,仅调整迭代返回的对象类型:

def add_to_database(object_name, value):
    workbook = openpyxl.load_workbook(DATABASE_FILE)
    worksheet = workbook[DATABASE_SHEET]
    object_row = None
    # 移除values_only=True,迭代返回单元格对象
    for row in worksheet.iter_rows(min_row=1, max_row=worksheet.max_row + 1):
        # 判断单元格的value属性是否匹配
        if row[0].value == object_name:
            object_row = row
            break
    if object_row:
        # 直接通过单元格对象获取行号
        worksheet.cell(row=object_row[0].row, column=2).value += value
    else:
        # 注意:原代码此处会覆盖最后一行,需改为max_row+1新增行
        last_row = worksheet.max_row + 1
        worksheet.cell(row=last_row, column=1).value = object_name
        worksheet.cell(row=last_row, column=2).value = value
    workbook.save(DATABASE_FILE)
    workbook.close()

方法二:保留values_only=True,记录行号

如果想继续使用值迭代,可以用enumerate同步记录行号:

def add_to_database(object_name, value):
    workbook = openpyxl.load_workbook(DATABASE_FILE)
    worksheet = workbook[DATABASE_SHEET]
    target_row_num = None
    # 用enumerate获取行号,start=1对应Excel的行号
    for row_num, row in enumerate(worksheet.iter_rows(min_row=1, max_row=worksheet.max_row + 1, values_only=True), start=1):
        if row[0] == object_name:
            target_row_num = row_num
            break
    if target_row_num:
        worksheet.cell(row=target_row_num, column=2).value += value
    else:
        last_row = worksheet.max_row + 1
        worksheet.cell(row=last_row, column=1).value = object_name
        worksheet.cell(row=last_row, column=2).value = value
    workbook.save(DATABASE_FILE)
    workbook.close()

额外注意

原代码中新增数据的逻辑存在bug:last_row = worksheet.max_row会覆盖当前工作表最后一行的内容,必须改为last_row = worksheet.max_row + 1才能在新行添加数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:12