Openpyxl报错:'Worksheet'对象不可调用,行转数组函数问题
问题解决
错误原因
- 单元格访问方式错误:openpyxl的Worksheet对象不能直接通过
sheet(row=..., column=...)调用,必须用sheet.cell(row=..., column=...)方法获取单元格。 - 列索引起始值错误:openpyxl的列从1开始计数,你代码里x从0开始,会直接拿到无效列的空值,循环无法正常执行。
- 导入缺失:你只导入了
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
相关产品推荐
相关产品推荐

