如何用Python读取docx指定表格(3-9)的指定行并导出至Excel
解决方法
你的原代码存在缩进错误、变量名写错(rows.cells应为row.cells)、df未初始化的问题,且没有实现表格和行的筛选逻辑。下面是修正后的代码,完全满足你的需求:
from docx.api import Document import pandas as pd # 加载目标docx文档 document = Document("你的文件名.docx") # 用于存储所有筛选后的数据 all_filtered_data = [] # 筛选第3至第9号表格(Python是0索引,对应列表切片[2:9],包含索引2到8的表格) for table in document.tables[2:9]: # 提取每个表格的前4行 for row in table.rows[:4]: # 取出该行每个单元格的文本,顺便去掉前后空白 row_content = [cell.text.strip() for cell in row.cells] all_filtered_data.append(row_content) # 将收集到的数据转为DataFrame result_df = pd.DataFrame(all_filtered_data) # 根据实际表格列数设置列名,按需修改 result_df.columns = ["Column1", "Column2", "Column3", "Column4"] # 导出到Excel,index=False表示不导出索引列 result_df.to_excel("筛选结果.xlsx", index=False)
关键细节说明:
- 表格范围控制:
document.tables[2:9]是因为Python列表从0开始计数,第3个表格对应索引2,第9个对应索引8,切片[2:9]会精准包含这部分表格。 - 行范围控制:
table.rows[:4]直接截取每个表格的前4行,无需遍历全部行,更高效。 - 数据收集方式:用列表先收集所有行数据再转DataFrame,比原代码里的
df.append更高效,且append已被Pandas弃用。 - strip()作用:去除单元格文本前后的空白字符,让导出的数据更整洁,不需要的话可以删掉这个方法。
如果你的目标表格列数不一致,导出时可能出现列对齐问题,确保要提取的表格列数统一,或者根据实际情况调整列名设置。
内容的提问来源于stack exchange,提问作者3290_ali
相关产品推荐
相关产品推荐

