1

在工作中,我们有一个 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 文档时,我会简单地删除所有“仅初始构建”的部分(当然,除非它是初始构建)。

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

所以,我的问题是,有什么方法可以保留文档中的注释,或者是否有任何特殊标签可以添加到 XML 中,这些标签在文档的标准查看/编辑期间不可见,但不会被救人的话?

4

2 回答 2

1

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

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

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

Hello {name}

name="edi9999" 将被替换为Hello edi9999

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

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

将被替换为:

Hello John
Hello Mary
Hello Jane

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

如果names=[]

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

灵感来自小胡子

我该如何构建这个?

我已经为 Javascript 创建了一个实现(适用于节点和浏览器):https ://github.com/edi9999/docxgenjs

这里有一个演示:

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

于 2013-09-16T12:08:50.327 回答
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')
于 2013-11-03T05:12:50.940 回答