使用Python操纵具有链接和跟踪更改的Microsoft Word DOCX文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python操纵具有链接和跟踪更改的Microsoft Word DOCX文件相关的知识,希望对你有一定的参考价值。
我一直在使用优秀的python-docx包来读取,修改和编写Microsoft Word文件。该包支持从每个段落中提取文本。它还允许一次访问段落“run”,其中run是一组具有相同字体信息的字符。不幸的是,当您通过运行访问段落时,会丢失链接,因为包不支持链接。该软件包也不支持访问更改跟踪信息。
我的问题是我需要访问更改跟踪信息。或者,更具体地说,我需要将具有从一个文档指示的更改跟踪的段落复制到另一个文档。
我试过在XML级别这样做。例如,此代码段将file1.docx的内容附加到file2.docx:
from docx import Document
doc1 = Document("file1.docx")
doc2 = Document("file2.docx")
doc2.element.body.append(doc1.element.body)
doc2.save("file2-appended.docx")
当我尝试在Mac上打开复杂文件的文件时,我收到此错误:
但是,如果我单击确定,内容就在那里。对于非常简单的文件,操作也没有问题。
我错过了什么?
.element
属性实际上是一个“内部”接口,应该命名为._element
。在其他大多数地方我都把它命名为。你得到的是文档部分的根元素。您可以通过调用来查看它是什么:
print(doc2.element.xml)
那个元素下面只有一个w:body
元素,这是你用doc2.element.body
时得到的(.xml
也可以用它,顺便说一句,如果你想检查那个元素)。
你的代码正在做的是在另一个w:body
元素的末尾附加一个body元素,从而形成无效的XML。 WordprocessingML词汇表对于哪个元素可以跟随另一个元素以及多少个等等非常严格。对我来说唯一的惊喜是它实际上有时适合你,我接受它:)
如果你想直接操作XML,这就是._element
属性的用途,你需要仔细考虑(复杂的)WordprocessingML XML Schema。
与您坚持使用已发布的API不同,一旦._element
(或.element
)出现在您的代码中,就没有安全网。
在体内,XML可以是与外部文档部分的关系,如图像和超链接。这些仅在它们出现的文档中有效。这可以解释为什么可以修复某些文件。
以上是关于使用Python操纵具有链接和跟踪更改的Microsoft Word DOCX文件的主要内容,如果未能解决你的问题,请参考以下文章