如何通过更改文件的 Office Open XML 表示来修改 word 文档的内容?

How to modify the contents of a word document by changing Office Open XML representation of the file?

我正在使用 Word JavaScript API 为 Office Word 2016 构建一个加载项。由于它不提供对我需要的文档的控制级别,我试图通过直接更改文档的 OOXML 来实现这一点。由于用户可以拥有任意页数的文档,因此我不确定这是否是正确的方法。我想知道是否有任何方法可以简化这一点,比如只提取文档的一部分并将其插入回去。

好问题,对于初学者来说,我很想知道您在 API 中期望的控制级别,我想知道您是否可以分享有关潜在差距的更多详细信息(提前致谢!)。

现在,回答你的问题:绝对!我们通过 OOXML 打开门与文档进行交互。这是一个非常强大的工具,尽管可能很复杂(但似乎你对 WordML 很了解)并且它可能很慢,特别是在 Win32 或 Mac 以外的平台上(Word Online XML 注入是 sloooooooow ).

完成您需要的关键是获得一个范围(我需要一个关于您提到的 "extracting parts of the document" 的更详细的标准,但归根结底是获得一个范围)。一旦你拥有它,你实际上可以做一个 range.insertOoxml("your OOXML","replace") 来用你拥有的任何 OOXML 替换那个范围。

您可以在 API 中通过多种不同的方式获取范围。例如搜索方法 returns 范围的集合。所有对象都有一个 .getRange() 方法,您可以使用它。

以下示例将文档中第一段的第一个单词替换为给定的 OOXML。

  Word.run(function (ctx) {

             var myTempOOXML = "get some valid  OOXML!"
             ctx.document.body.paragraphs.getFirst().split([" "],false,false,false).getFirst().insertOoxml(myTempOOXML, "replace");
             return ctx.sync();


         }).catch(function (e) { app.showNotification(e.message)})

希望这能让您朝着正确的方向前进。 顺便说一句,here is a useful article about ooxml and word.js