python-docx 在单元格应满时返回空单元格

python-docx returning empty cells when they should be full

我正在尝试遍历文档中的所有表格并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。

我在类似的帖子中查看了 scanny 提供的其他代码,但出于某种原因,它没有给我正在解析的文档的预期输出

可在 https://www.ontario.ca/laws/regulation/140300

找到该文档
from docx import Document
from docx.enum.text import WD_COLOR_INDEX
import os, re, sys

document = Document("path/to/doc")

tables = document.tables

for table in tables:

    for row in table.rows:

         for cell in row.cells:

              for paragraph in cell.paragraphs:
                   print(paragraph.text)

我希望这能打印出所有文本,但我什么也没得到。如果我尝试打印(row.cells),它只会打印()。我猜这是一个空列表。不过,我的文档确实在单元格中有文本。不知道这里出了什么问题。

感谢任何帮助,

单元格文本 "contained" 可能位于 python-docx 尚不理解的包装元素中。最常见的例子是修订标记。

诊断问题最直接的方法是使用 opc-diag(作为一种选择)检查 XML 是否有问题 table。但如果是修订标记,我相信接受文档的所有修订将修复它,尽管我自己还没有真正尝试过。

如果那不行,你 post 一个样本 table XML 我可以仔细看看。

发现错误。我使用第三方工具(multiDoc 转换器)将旧的 .Doc 文件转换为 Docx 格式。大多数情况下都有效,但是必须有一些元数据无法正确转换,因为它导致了问题。打开文件并将其手动保存为 Docx 解决了这个问题。唯一的问题是我想将 2000 多个文件转换为 Docx,因此我需要找到另一种解决方案来转换文件。

我的文档有数百个表格,只有少数表格显示为空(但实际上并非如此)。因此,我尝试使用 tabula 从同一文档的 pdf 版本中提取数据,结果相同:一些新创建的表格是空的!

经过一番挖掘,我意识到我的 Word 文档处于“跟踪更改”模式(让“更改栏”指示与以前版本的差异,表格本身是一个更改,而不是尚未接受,那是未提取的表格...

解决方案:在我的例子中,我必须接受对文档的所有更改(在 Word 的“审阅”选项卡中,在“接受”向下滚动中,单击“接受所有更改”)并保存文档再次.