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

Openpyxl报错:'Worksheet'对象不可调用,行转数组函数问题

问题解决

错误原因

  1. 单元格访问方式错误:openpyxl的Worksheet对象不能直接通过sheet(row=..., column=...)调用,必须用sheet.cell(row=..., column=...)方法获取单元格。
  2. 列索引起始值错误:openpyxl的列从1开始计数,你代码里x从0开始,会直接拿到无效列的空值,循环无法正常执行。
  3. 导入缺失:你只导入了Workbook,但加载现有Excel文件需要load_workbook,得补上这个导入。

修正后的基础版代码

from openpyxl import load_workbook  # 修正导入,替换原Workbook导入(不需要创建新文件时可直接替换)

oldworkbook = load_workbook(filename="111.xlsx")
oldsheet = oldworkbook.active

def rowtoArray(startRow, oldsheet):
    arr = []
    x = 1  # 列索引从1开始
    while True:
        cell = oldsheet.cell(row=startRow, column=x)
        if cell.value is None:
            break
        arr.append(cell.value)
        x += 1  # 列数递增,避免无限循环
    return arr

更简洁的写法(利用openpyxl内置方法)

直接用iter_rows遍历指定行,代码更简洁高效:

from openpyxl import load_workbook

oldworkbook = load_workbook(filename="111.xlsx")
oldsheet = oldworkbook.active

def rowtoArray(startRow, oldsheet):
    # 遍历指定行,筛选非空值存入数组
    return [cell.value for cell in oldsheet.iter_rows(min_row=startRow, max_row=startRow) if cell.value is not None]
    # 也可以用values_only=True直接获取值,省略cell.value:
    # return [val for val in oldsheet.iter_rows(min_row=startRow, max_row=startRow, values_only=True) if val is not None]

你说函数外运行没问题,大概率是函数外写的时候用对了cell()方法,写到函数里时误写成直接调用sheet对象,才触发了这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:20:59