如何按指定列标题批量从Word文档中提取目标表格?
修改后的代码方案
以下是针对需求优化后的代码,能够自动识别包含指定表头的表格,不再依赖固定索引:
import pandas as pd from docx.api import Document import os # 定义需要匹配的目标表头集合 TARGET_HEADERS = {'CONTACT NAME', 'POSITION', 'LOCATION', 'EMAIL', 'TELEPHONE', 'ASSET CLASS'} path = 'C:\\Users\\user1\\test' os.chdir(path) data = [] for filename in os.listdir(path): # 只处理docx格式的Word文档 if not filename.endswith('.docx'): continue try: doc = Document(os.path.join(path, filename)) target_table = None # 遍历当前文档的所有表格,寻找符合条件的目标表格 for table in doc.tables: # 提取表格第一行的表头文本,去除空格并统一大写(避免大小写或空格差异) header_texts = [cell.text.strip().upper() for cell in table.rows[0].cells] header_set = set(header_texts) # 检查当前表格是否包含所有目标表头 if TARGET_HEADERS.issubset(header_set): target_table = table break if target_table: # 提取表格数据,跳过表头行(从第二行开始) for row in target_table.rows[1:]: row_data = [cell.text.strip() for cell in row.cells] data.append(row_data) else: print(f"文件 {filename} 未找到目标表格") except Exception as e: print(f"处理文件 {filename} 时出错: {str(e)}") # 将提取的数据转为DataFrame,指定列名 df = pd.DataFrame(data, columns=list(TARGET_HEADERS)) print(df) # 可选:将结果保存到Excel文件 # df.to_excel('提取结果.xlsx', index=False)
关键修改说明
- 动态识别表格:不再固定取第8个表格,改为遍历文档内所有表格,通过比对表头集合确定目标表格,解决表格位置不固定的问题。
- 表头容错处理:对表头文本做了去空格、统一大写的处理,避免因文档中表头大小写不一致、带空格导致的匹配失败。
- 异常防护:添加了异常捕获机制,单个文档处理出错不会中断整个批量任务,同时打印错误信息方便排查。
- 数据过滤:只处理
.docx格式文件,避免非Word文档干扰;提取数据时跳过表头行,避免表头混入结果数据。
内容的提问来源于stack exchange,提问作者AJenkins
相关产品推荐
相关产品推荐

