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

使用openpyxl将XLSX文件内容保存为列表时出现IndexError该如何解决

错误原因
  • 列表索引错位:openpyxl的行、列编号从1开始计数,而Python列表的索引从0开始。遍历行时rij从1开始取值,每次给sheet_to_list追加1个空列表后,新增空列表对应的索引是rij-1,直接用sheet_to_list[rij]访问超出了列表的实际长度,触发索引越界。
  • 属性位置错误:.value是单元格对象的属性,原代码把它写在了append()方法的外侧,而append()执行后返回值为None,既无法拿到单元格值,写法也不符合语法逻辑。
修复后完整代码
import openpyxl

file = "november-results.xlsx"
# 新增read_only参数适配大文件场景,读取效率更高、内存占用更低
content = openpyxl.load_workbook(file, read_only=True)
sheet = content.active
sheet_to_list = []

for rij in range(1, sheet.max_row + 1):
    current_row = []
    for kol in range(1, sheet.max_column + 1):
        # 先取单元格的值,再追加到行列表中
        current_row.append(sheet.cell(row=rij, column=kol).value)
    sheet_to_list.append(current_row)

# 读取完成后关闭工作簿释放资源
content.close()
简化写法

如果需要更简洁的实现,可以直接用openpyxl内置的iter_rows方法,配合列表推导式完成转换:

import openpyxl

# 用上下文管理器自动处理工作簿关闭逻辑
with openpyxl.load_workbook("november-results.xlsx", read_only=True) as wb:
    sheet = wb.active
    # values_only=True直接返回单元格值,无需单独取.value属性
    sheet_to_list = [list(row) for row in sheet.iter_rows(values_only=True)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:03