2015-05-23 19 views
15

Görevim, Word 2007 veya üstü ile uyumlu bir Word belgesinde (.docx) Office Javascript API'sı aracılığıyla bir yorum yerleştirmektir.Office Javascript API'sine yorumlarınızı yerleştirin 1.1

Microsoft API aracılığıyla bunu yapmak için no doğrudan yol olduğunu anladım.

OOXML'yi Word belgesine aktarabildiğim için, bunu yorum eklemek için kullanabileceğimi düşündüm.

Word belge yapısı üzerinde bir araştırma yaptım ve yorumların "comments.xml" adlı ayrı bir XML dosyasında saklandığını ve sonra "document.xml" dosyasında bir kimlik yoluyla başvuruda bulunduğunu öğrendim (karşılık gelen bir örnek ekledim).

Word belgesine yorum eklemek için bu comments.xml API aracılığıyla düzenleme yapmanın bir yolu var mı, yoksa bu değil mümkün mü?

örnek "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> 

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

cevap

2

Bu benim mümkün olmuştur çoğu bilgidir Bunu sizinle araştırırken bul:

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

Not: | bir uygulamadan OOXML'i manipüle hakkında bilgi edinmek için iyi bir yolu, örneğin (UI kullanarak Insert tıklayarak SmartArt ekleme çalışmak istediğiniz içerik eklemektir Çizimler | SmartArt), getOnceDataAsync kullanarak içerik için OOXML alma ve sonuçları okuma.

Bunu yapar ve o sonuçları setSelectedDataAsync kullanarak ooxml olarak gönderirim ve bu da sorunuzu yanıtlayacaktır. Ofis bu referansları oluşturmak için yeterince akıllı mı, yoksa değil mi?

(Ben gerçek olamayacak kadar ilk önermeyi bulundu. Görmezden ya gülmek için lütfen okuyun) ESKİ YORUM

Öyle görünüyor (değilse, API aracılığıyla bu konuda yapabileceği hiçbir şey yoktur) setSelectedDataAsync işlevini kullanarak yorum değerlerini iletebilir ve bunları sözcük belgesindeki geçerli seçili içeriğe uygulayabilirsiniz.

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

ve microsoft'un örneklerinden biri kullanılan coerciontype uygulanması ve coerciontype sadece customexmlnodetype gibi bir numaralandırma olmasından itibaren

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

... O yapar: İşte iki en ilgili snippet'leridir Bunun işe yarayacağını hissediyorum.

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

}

tüm numaralandırma Şimdi nesnesi altında isteğe bağlı bir parametre olarak coercionType bulmak geri belgeleri üzerinden bakıldığında, olup. Bu çok aptalca!

Kontrol şuna: https://msdn.microsoft.com/en-us/library/office/fp142145.aspx

Ve bu: https://msdn.microsoft.com/EN-US/library/office/fp142154.aspx

İşte

Ben başvurulan bilgidir