2015-05-23 23 views
15

Il mio compito è inserire un commento tramite l'API di Office Javascript in un documento Word (.docx) compatibile con Word 2007 o versioni successive.Inserire commenti tramite Office Javascript API 1.1

Ho trovato che esiste il modo no per farlo tramite l'API Microsoft.

Dato che sono in grado di passare OOXML al documento Word, ho pensato di poterlo utilizzare per inserire un commento.

Ho effettuato alcune ricerche sulla struttura del documento di Word e ho rilevato che i commenti sono memorizzati in un file XML separato chiamato "comments.xml" e quindi referenziati tramite un ID nel "document.xml" (ho allegato un campione corrispondente).

C'è un modo per modificare questo comments.xml tramite API al fine di inserire commenti nel documento di Word o è questo non possibile?

campione "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> 

campione "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> 

risposta

2

Questa è la maggior parte delle informazioni che ho potuto trova mentre stai facendo ricerche con te:

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

Nota: Un buon modo per conoscere come manipolare OOXML da un app è quello di aggiungere il contenuto che si desidera lavorare con l'interfaccia utente (ad esempio, l'inserimento di SmartArt facendo clic su Inserisci | Illustrazioni | SmartArt), ottenendo l'OOXML per il contenuto utilizzando getSelectedDataAsync e quindi leggendo i risultati.

Farei questo e quindi inviare quei risultati come ooxml utilizzando setSelectedDataAsync e questo risponderà alla tua domanda. L'ufficio è abbastanza intelligente da creare tali riferimenti, o no? (Se non, non c'è niente che si può fare su di esso tramite l'API)

COMMENTO VECCHIO (dove ho trovato la tua prima premessa per essere vero. Si prega di ignorare, o leggere per ride)

Assomiglia è possibile utilizzare la funzione setSelectedDataAsync per passare i valori dei commenti e applicarli al contenuto selezionato corrente nel documento word. Qui ci sono i due frammenti più rilevanti:

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

e

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

Dalla realizzazione di coerciontype utilizzato in uno dei esempi di Microsoft e il fatto che coerciontype è un'enumerazione proprio come customexmlnodetype ... Rende sentirmi che questo funzionerebbe.

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); 
     } 
    }); 

}

Guardando indietro attraverso la documentazione che ora trovo coercionType come un parametro opzionale sotto oggetto, e non tutte le enumerazioni. È così stupido !!

Ecco le informazioni ho fatto riferimento:

Check this out: https://msdn.microsoft.com/en-us/library/office/fp142145.aspx

E questo: https://msdn.microsoft.com/EN-US/library/office/fp142154.aspx

Problemi correlati