Ms word 使用Python操作具有链接和跟踪更改的Microsoft Word DOCX文件

Ms word 使用Python操作具有链接和跟踪更改的Microsoft Word DOCX文件,ms-word,python-docx,Ms Word,Python Docx,我一直在使用这个优秀的软件包来读取、修改和编写MicrosoftWord文件。该包支持从每个段落中提取文本。它还允许一次访问一个段落“run”,其中run是一组具有相同字体信息的字符。不幸的是,当您通过运行访问段落时,会丢失链接,因为包不支持链接。该包也不支持访问更改跟踪信息 我的问题是我需要访问更改跟踪信息。或者,更具体地说,我需要将具有变更跟踪指示的段落从一个文档复制到另一个文档 我尝试过在XML级别上这样做。例如,此代码段将file1.docx的内容附加到file2.docx: from

我一直在使用这个优秀的软件包来读取、修改和编写MicrosoftWord文件。该包支持从每个段落中提取文本。它还允许一次访问一个段落“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电脑上打开复杂文件时,会出现以下错误:

但是如果我点击OK,内容就在那里了。对于非常简单的文件,操作也可以毫无问题地工作


我缺少什么?

属性
.element
实际上是一个“内部”接口,应该命名为
\u element
。在大多数其他地方,我都这样命名。您得到的是文档部分的根元素。您可以通过调用以下命令查看它是什么:

print(doc2.element.xml)
该元素下面只有一个
w:body
元素,这是使用
doc2.element.body
时得到的结果(
.xml
也可以使用,顺便说一句,如果您想检查该元素)

代码所做的是在另一个
w:body
元素的末尾追加一个body元素,从而形成无效的XML。WordprocessingML词汇表非常严格地规定了哪些元素可以跟在另一个元素后面,有多少个元素,等等。我唯一感到惊讶的是,它有时确实对你有用,我想:)

如果您想直接操作XML,这就是
\u元素
属性的作用,那么您需要仔细操作,因为它是(复杂的)WordprocessingML XML模式

与坚持使用已发布的API不同,一旦
\u element
(或
.element
)出现在代码中,就没有安全网


正文XML内部可以是与外部文档部分的关系,如图像和超链接。这些仅在其出现的文档中有效。这也许可以解释为什么有些文件可以修复。

Hm。这是个好消息,但对我来说很沮丧。我迫切需要做一件事,即合并多个文件中的段落,同时保留更改跟踪。与其将doc2.element.body附加到另一个doc.element.body,不如将doc2的doc2.element.body中的所有子元素逐个附加到doc.element.body?我想值得一试。确实有一些方法可以破坏文档,但根据您的内容,它可能会起作用。最有可能把事情搞砸的可能是图片和超链接。这两个项目都涉及必须单独移交的外部项目。请注意,您不能仅将新项目附加到
w:body
元素的末尾,该“最后一个子”位置是为
w:sectPr
元素保留的。因此,您必须在
正文[-1]
之前插入它们。这里有更多的文档:谢谢你的信息。我不知道最后一个孩子的位置。我想我最好不要把它抄过来…啊!注释存储在comments.xml中!我真的需要合并评论和更改跟踪。@vy32您手头有一个具有挑战性的项目:)