如何迭代python-docx文档中的所有内容?

the*_*uru 8 python python-docx

python-docx用于将Word docx转换为自定义HTML等效项.我需要转换的文档有图像和表格,但我无法弄清楚如何访问给定运行中的图像和表格.这就是我的想法......

for para in doc.paragraphs:
    for run in para.runs:
        # How to tell if this run has images or tables?
Run Code Online (Sandbox Code Playgroud)

...但我没有看到Run有关于InlineShape或有信息的任何内容Table.我是否必须直接回退到XML,或者是否有更好,更清晰的方法来迭代文档中的所有内容?

谢谢!

sca*_*nny 6

你要做的事实上有两个问题需要解决.第一种是按文档顺序迭代文档中的所有块级元素.第二个是按照它们出现的顺序迭代每个块元素中的所有内联元素.

python-docx还没有直接执行此操作所需的功能.但是,对于第一个问题,这里有一些示例代码可能对您有用:https: //github.com/python-openxml/python-docx/issues/40

没有确切的对应我知道处理内联项目,但我希望你可以与paragraph.runs相处得很远.所有内联内容都在一个段落内.如果你大部分时间都在那里,并且只是想要获取图片或其他东西,你可以下载lxml级别并解码一些XML以获得你需要的东西.如果你走得那么远并且仍然敏锐,如果你在GitHub问题列表上发布一个功能请求,例如"feature:Paragraph.iter_inline_items()",我可能会为你提供一些类似的代码来帮助你获得所需.

这个要求不时出现,所以我们肯定想在某个时候添加它.

请注意,块级项目(主要是段落和表格)可以递归显示,一般解决方案需要考虑到这一点.特别是,一个段落可以(实际上至少有一个段落)必须出现在表格单元格中.表格也可以出现在表格单元格中.所以理论上它可以变得非常深.递归函数/方法是获得所有这些的正确方法.