Разместить комментарии через Office Javascript API 1.1

Моя задача - разместить комментарий через API Office Javascript в документе Word (.docx), совместимом с Word 2007 или новее.

Я обнаружил, что существует прямой нет прямой доступ к этому с помощью Microsoft API.

Поскольку я могу передать OOXML в документ Word, я подумал, что могу использовать это для размещения комментария.

Я провел некоторое исследование структуры документа Word и обнаружил, что комментарии хранятся в отдельном XML файле с именем "comments.xml", а затем ссылаются через идентификатор в "document.xml" (я приложил соответствующий образец).

Есть ли способ редактировать этот 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>

Ответы

Ответ 1

Это самая информация, которую я смог найти, исследуя это с вами:

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

Примечание. Один хороший способ узнать о том, как управлять OOXML из приложения, - это добавить контент, с которым вы хотите работать с использованием пользовательского интерфейса (например, вставка SmartArt, нажав "Вставить | Иллюстрации" SmartArt), получив OOXML для содержимого с использованием getSelectedDataAsync, а затем для чтения результатов.

Я бы сделал это, а затем отправлю эти результаты как ooxml с помощью setSelectedDataAsync, и это ответит на ваш вопрос. Является ли офис достаточно умным, чтобы сами создавать эти ссылки, или нет? (если нет, вы ничего не можете сделать с помощью api)

OLD COMMENT (Где я нашел ваше первое предположение истинным. Пожалуйста, проигнорируйте или прочитайте для смеха)

Похоже, вы можете использовать функцию setSelectedDataAsync для передачи значений комментариев и применять их к текущему выбранному контенту в документе слова. Вот два наиболее важных фрагмента:

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

и

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

Из реализации типа принуждения, используемого в одном из примеров Microsoft, и тот факт, что тип 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