17

我的任务是通过 Office Javascript API 在与 Word 2007 或更高版本兼容的 Word 文档 (.docx) 中添加评论。

我发现,没有直接的方法可以通过 Microsoft API 做到这一点。

由于我能够将 OOXML 传递给 Word 文档,因此我认为我可以使用它来发表评论。

我对 Word 文档结构进行了一些研究,发现评论存储在一个名为“comments.xml”的单独 XML 文件中,然后通过“document.xml”中的 ID 引用(我附上了相应的示例)。

有没有办法comments.xml通过 API 进行编辑,以便在 Word 文档中添加评论,或者这不可能

示例“document.xml”:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
    mc:Ignorable="w14 wp14">
<w:body>
    <w:p w:rsidR="00A9590C" w:rsidRDefault="0058668B">
        <w:r>
            <w:t>I am text.</w:t>
        </w:r>
    </w:p>
    <w:p w:rsidR="0058668B" w:rsidRDefault="0058668B">
        <w:commentRangeStart w:id="0"/>
        <w:r>
            <w:t>I am text with comment.</w:t>
        </w:r>
        <w:commentRangeEnd w:id="0"/>
        <w:r>
            <w:rPr>
                <w:rStyle w:val="Kommentarzeichen"/>
            </w:rPr>
            <w:commentReference w:id="0"/>
        </w:r>
    </w:p>
    <w:sectPr w:rsidR="0058668B">
        <w:pgSz w:w="11906" w:h="16838"/>
        <w:pgMar w:top="1417" w:right="1417" w:bottom="1134" w:left="1417" w:header="708" w:footer="708"
                 w:gutter="0"/>
        <w:cols w:space="708"/>
        <w:docGrid w:linePitch="360"/>
    </w:sectPr>
</w:body>

示例“comments.xml”:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <w:comments
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
  mc:Ignorable="w14 wp14">
 <w:comment w:id="0" w:author="rz" w:date="2015-05-23T10:30:00Z" w:initials="r">
<w:p w:rsidR="0058668B" w:rsidRDefault="0058668B">
    <w:pPr>
        <w:pStyle w:val="Kommentartext"/>
    </w:pPr>
    <w:r>
        <w:rPr>
            <w:rStyle w:val="Kommentarzeichen"/>
        </w:rPr>
        <w:annotationRef/>
    </w:r>
    <w:r>
        <w:t>Test</w:t>
    </w:r>
    <w:bookmarkStart w:id="1" w:name="_GoBack"/>
    <w:bookmarkEnd w:id="1"/>
</w:p>
 </w:comment>
</w:comments>
4

1 回答 1

2

这是我与您一起研究时能够找到的最多信息:

https://msdn.microsoft.com/en-us/magazine/jj991976.aspx

注意:了解如何从应用程序操作 OOXML 的一种好方法是使用 UI 添加要使用的内容(例如,通过单击插入 | 插图 | SmartArt 插入 SmartArt),获取内容的 OOXML使用 getSelectedDataAsync 然后读取结果。

我会这样做,然后使用 setSelectedDataAsync 将这些结果作为 ooxml 发送,这将回答您的问题。office 是否足够聪明,可以自己创建这些引用,或者不是?(如果没有,您无法通过 api 做任何事情)

旧评论(我发现你的第一个前提是正确的。请忽略,或阅读笑声)

看起来您可以使用 setSelectedDataAsync 函数传入注释值并将它们应用到 word 文档中当前选定的内容。以下是两个最相关的片段:

 Office.context.document.setSelectedDataAsync(data [, options], callback(asyncResult));

 Office.CustomXMLNodeType.NodeComment   "comment"   The node is a comment.

从微软的一个示例中使用的 coerciontype 的实现以及 coerciontype 是一个枚举的事实,就像 customexmlnodetype 一样......这对我来说很有意义。

 function writeMatrix() {
     Office.context.document.setSelectedDataAsync("test comment"], {CustomXMLNodeType: Office.Office.CustomXMLNodeType.NodeComment}
    function (asyncResult) {
        var error = asyncResult.error;
        if (asyncResult.status === Office.AsyncResultStatus.Failed){
            write(error.name + ": " + error.message);
        }
    });

}

回顾文档,我现在发现 coercionType 作为对象下的可选参数,而不是所有枚举。那太愚蠢了!!

以下是我参考的资料:

看看这个:https ://msdn.microsoft.com/en-us/library/office/fp142145.aspx

而这个:https ://msdn.microsoft.com/EN-US/library/office/fp142154.aspx

于 2016-02-19T15:28:30.233 回答