如何使用 win32 COM 从 Word Doc 中获取特定的 table?

How to get specific table from Word Doc using win32 COM?

我正在尝试浏览一个 word 文档并在许多 table 中找到一些特定的 table。我知道如何使用 docx 库或 win32 遍历所有 tables,发现 here。但是,我需要访问一些特定的 table,而不是全部。

这些 table 有标题,格式为 Table A.x.x-x Insert table summary。它们是 table 之上的文本标题,而不是 table 本身。但是,当我在 win32 中使用 doc.ListParagraphs 时,这些不会显示,因此我无法以这种方式成功地遍历 table。

我知道我需要访问的 table 的名称。整个文档中有不相关的文本。在我需要查找的 table 中没有任何相似之处,因此我不能只在某个单元格或类似的东西中查找特定值。

有人对如何解决这个问题有建议吗?最好使用 win32 COM,但我愿意接受任何解决方案。

我认为您要查找的合集是 doc.Paragraphs

doc.ListParagraphs 仅 returns 个具有列表格式的段落,例如项目符号或编号。

还有其他挑战,但我相信这是第一个解开的谜团:)

我通过 this 讨论找到了答案。感谢您说明使用哪个 win32 COM 函数!

根据讨论,我使用了 iter_block_items 的代码。我还列出了我想要的标题的所有 table 个标题,称为 listOfTables。然后我使用了下面的代码,它输出一个字典,键是 tables 的标题,值是 tables 本身。

dox = docx.Document(path) count = False tables = {} for item in iter_block_items(dox): try: title = item.text if title in listOfTables: count = True except: if count == True: tables[str(title)] = item count = False print tables

如果遇到 table,我们将转到例外情况,因为 table 没有属性 'text'。然后,如果 count 为真,也就是如果前一段包含 table 标题,则将标题和 table 本身存储在字典中。这会将标题与适当的 table 配对,我将可以轻松访问我需要的 table。