如何向.docx XML添加注释

时间:2013-09-14 00:34:02

标签: xml docx

在工作中,我们有一个word文档,我们必须一直编辑以传递给另一个团队,告诉他们如何执行某些任务。由于我不喜欢盲目地填写数据,而且我一直在寻找简化我必须完成的任务的方法,所以我决定自动完成这个过程。在考虑了一些方法(例如从头开始生成word文档或编辑现有文档)之后,我决定就地编辑文档。

我在文档中插入了特殊标记(具体来说,它们采用[SOME_NAME_HERE]形式),然后我将解析文档中的那些特殊标记,并用我实际需要的值替换它们。然后我将.docx解压缩到包含其中所有XML文档的文件夹,并解析document.xml文件,替换值。

在此过程中,根据实际需要,文档的某些部分必须从中删除。所以我的第一个想法是在document.xml文件中添加注释。例如:

<!-- INITIAL BUILD ONLY -->
      <w:p w:rsidR="00202319" w:rsidRPr="00D00FF5" w:rsidRDefault="00202319" w:rsidP="00AC0192">
        <w:r w:rsidR="00E548A2" w:rsidRPr="00D00FF5">
          <w:rPr>
            <w:rStyle w:val="emcfontstrong"/>
          </w:rPr>
          <w:t>Some text here</w:t>
        </w:r>
      </w:p>
<!-- END INITIAL BUILD ONLY -->

然后,当我去生成输出word文档时,我只是删除所有“INITIAL BUILD ONLY”部分(当然,除非它是初始版本)。

但是,我遇到的问题是,当您将文档转换回Word文档,在Word中打开并保存时,它将“清理”文档,并删除我添加的所有注释它。

所以,我的问题是,有没有办法保留文档中的注释,或者是否有任何我可以添加到XML的特殊标记,这些标记在文档的标准视图/编辑过程中不可见,但不会保存后用Word删除?

2 个答案:

答案 0 :(得分:1)

选择编辑文档是一个不错的选择imo!

Word在打开docx并再次保存时会做很多更改,所以我不相信这一点。我甚至不知道在document.xml内存储隐藏和持久数据的位置。

这是一个使用其他技术获得所需内容的想法。

Hello {name}
名称=“edi9999”的

将替换为Hello edi9999

{#names}
Hello {name}
{/names}

names=[{name:"John"},{name:"Mary"},{name:"Jane"}]

将替换为:

Hello John
Hello Mary
Hello Jane

现在注释掉一个部分的技巧是使用一个空数组。

如果names=[]

输出将是一个空字符串。如果要取消注释,请使用包含一个元素的数组。

灵感来自Mustache

我如何构建它?

我为Javascript创建了这个实现(适用于Node和浏览器):https://github.com/edi9999/docxgenjs

这里有一个演示:

http://javascript-ninja.fr/docxgenjs/examples/demo.html

答案 1 :(得分:0)

为了回应上一张海报,我发现Microsoft Word在打开/保存文件时会做很多幕后魔术,并且不会建议在任何xml文件中存储元数据。

但是,如果您不是在编写脚本之上,那么使用任意数量的模块都不应该太难。这是使用oodocx的基本Python实现,这是我正在开发的模块。

from oodocx import oodocx
from lxml import etree

d = oodocx.Docx('template.docx')
body = d.get_body()
paragraph_to_remove = d.search('Some text here', result_type='paragraph')
body.remove(paragraph_to_remove)
d.save('new document.docx')