如何使用python-docx检测.docx表格中的删除线文本?
解决python-docx表格中删除线文本的检测与过滤问题
其实表格单元格并非没有可访问Run对象的途径——每个表格单元格(Cell对象)内部包含Paragraph对象集合,你可以通过cell.paragraphs获取单元格内的所有段落,再像处理普通段落一样遍历每个段落的Run对象,检测删除线样式。
具体实现逻辑
- 遍历目标表格的每一行、每一个单元格
- 对每个单元格,遍历其包含的所有段落
- 对每个段落,遍历所有
Run对象,检查run.font.strike属性:- 若
run.font.strike为True,跳过该Run的文本 - 若为
False或None,保留该Run的文本
- 若
- 将单元格内所有保留的文本拼接,作为该单元格的有效内容存入字典
代码示例
from docx import Document def parse_table_to_dict(doc_path, table_index): doc = Document(doc_path) table = doc.tables[table_index] table_dict = {} # 示例为键值对结构表格,第一列是键,第二列是值,可按需调整 for row in table.rows: key_cell = row.cells[0] value_cell = row.cells[1] # 提取键的有效文本(过滤删除线) key_text = "" for para in key_cell.paragraphs: for run in para.runs: if not run.font.strike: key_text += run.text key_text = key_text.strip() # 提取值的有效文本(过滤删除线) value_text = "" for para in value_cell.paragraphs: for run in para.runs: if not run.font.strike: value_text += run.text value_text = value_text.strip() if key_text: table_dict[key_text] = value_text return table_dict # 调用示例 result = parse_table_to_dict("your_doc.docx", 0) print(result)
补充说明
run.font.strike在python-docx中返回布尔值,应用删除线样式时为True,未应用时为None或False,用not run.font.strike可准确过滤带删除线的内容- 若单元格内有多段文本,代码会自动拼接所有段落的有效内容,可根据实际需求调整拼接逻辑
- 非键值对结构的表格,只需修改行内单元格的处理逻辑即可适配
内容的提问来源于stack exchange,提问作者Opifex
相关产品推荐
相关产品推荐

