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

使用Python-docx访问Word表格时出现'list index out of range'报错求助

Python-docx访问表格出现IndexError的排查方案

常见原因及解决办法

  • 合并单元格导致实际行列数与视觉不符
    Word里的合并单元格在python-docx中不会被视为独立的行/列,比如合并2行后,table.rows的长度会比视觉上少1。解决:先打印真实行列数确认:
from docx import Document
doc = Document("你的文档.docx")
table = doc.tables[0]
print(f"真实行数:{len(table.rows)},真实列数:{len(table.columns)}")
# 逐行检查单元格数量
for i, row in enumerate(table.rows):
    print(f"第{i}行单元格数:{len(row.cells)}")
  • 索引计数错误
    python-docx的索引从0开始,而非Word界面的1开始。比如要取Word里的第3行第2列,代码里要用table.rows[2].cells[1],不是rows[3].cells[2]。

  • 选错了目标表格
    文档里可能存在隐藏的空表格或分节拆分的表格,导致你操作的tables[0]不是目标表格。解决:遍历所有表格确认:

for idx, table in enumerate(doc.tables):
    print(f"表格{idx}:行数{len(table.rows)},列数{len(table.columns)}")

找到符合预期行列数的表格再操作。

  • 行内存在未初始化的空单元格
    部分Word表格会有看似存在但实际未被创建的单元格,导致row.cells长度不足。解决:访问前先检查长度:
row = table.rows[你的行索引]
if len(row.cells) > 目标列索引:
    content = row.cells[目标列索引].text
else:
    content = ""  # 空内容处理

示例代码

from docx import Document

doc = Document("test.docx")
# 定位目标表格(假设至少有5行3列)
target_table = next((t for t in doc.tables if len(t.rows)>=5 and len(t.columns)>=3), None)

if target_table:
    try:
        # 访问Word里第2行第3列(对应索引rows[1].cells[2])
        cell_content = target_table.rows[1].cells[2].text
        print(cell_content)
    except IndexError:
        print("索引越界,检查合并单元格或行列实际数量")
else:
    print("未找到符合条件的表格")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:23:19