Python如何读取Word文本框内部嵌入的表格数据?
解决方案
你之前使用的doc.Tables只能获取文档主内容区域的顶层表格,嵌入在文本框内的表格属于形状(Shape)对象的内部内容,需要遍历文档的Shapes集合获取文本框,再读取文本框内部的表格即可,完整实现如下:
import win32com.client as win32 # 初始化Word应用 word = win32.gencache.EnsureDispatch('Word.Application') # 配置后台运行不显示界面、不弹告警 word.Visible = False word.DisplayAlerts = 0 # 打开目标文档,传入你的Word文件绝对路径 doc = word.Documents.Open(r"C:\xxx\目标文档.docx") # 收集所有表格:包含主内容表格 + 所有文本框内的表格 all_tables = [] # 先添加主内容区域的普通表格 for t in doc.Tables: all_tables.append(t) # 遍历所有形状对象,筛选文本框 for shape in doc.Shapes: # msoTextBox类型对应的常量值为17,判断当前形状是文本框 if shape.Type == 17: # 判断文本框内有内容 if shape.TextFrame.HasText: # 获取文本框内部的文档对象,读取其中的表格 inner_doc = shape.TextFrame.TextRange.Document for t in inner_doc.Tables: all_tables.append(t) # 示例:读取目标表格的所有单元格内容 if all_tables: # 可根据需求调整索引,文本框内的表格会排在主内容表格之后 target_table = all_tables[-1] # Word对象模型索引从1开始,注意不要越界 for row in range(1, target_table.Rows.Count + 1): row_content = [] for col in range(1, target_table.Columns.Count + 1): # 去除单元格内容末尾的多余控制符 cell_text = target_table.Cell(row, col).Range.Text.strip('\x07\x0b\r\n') row_content.append(cell_text) print(row_content) # 操作完成后关闭文档、退出Word,避免后台残留进程占用文件 doc.Close(SaveChanges=0) word.Quit()
- 若文档存在嵌套文本框,可增加一层递归遍历文本框内部的
Shapes集合即可适配 - 可以直接打印
all_tables的长度确认是否成功识别到文本框内的表格
内容的提问来源于stack exchange,提问作者Nima Hojat
相关产品推荐
相关产品推荐

