【问题标题】:Place comments through Office Javascript API 1.1通过 Office Javascript API 1.1 发表评论
【发布时间】:2015-05-23 08:56:07
【问题描述】:

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

我发现,没有直接的方法可以通过 Microsoft API 执行此操作。

由于我能够将 OOXML 传递给 Word 文档,我认为我可以使用它来放置注释。

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

有没有办法通过 API 编辑此 comments.xml 以便将 cmets 放置在 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>

示例“cmets.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>

【问题讨论】:

    标签: javascript ms-office office365 apps-for-office


    【解决方案1】:

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

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

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

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

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

    看来您可以使用 setSelectedDataAsync 函数传入注释值并将其应用于 word 文档中当前选定的内容。以下是两个最相关的 sn-ps:

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

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

    从 microsoft 的一个示例中使用的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多