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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:24:55