2015-05-23 15 views
15

Nhiệm vụ của tôi là đặt nhận xét qua API Javascript Office trong tài liệu Word (.docx) tương thích với Word 2007 trở lên.Đặt nhận xét qua API Javascript của Office 1.1

Tôi thấy rằng có không có cách trực tiếp để thực hiện việc này thông qua Microsoft API.

Vì tôi có thể chuyển OOXML sang tài liệu Word, tôi nghĩ rằng tôi có thể sử dụng điều này để đặt nhận xét.

Tôi đã thực hiện một số nghiên cứu về cấu trúc tài liệu Word và các nhận xét được lưu trữ trong một tệp XML riêng biệt gọi là "comments.xml" và sau đó được tham chiếu qua ID trong "document.xml" (tôi đính kèm một mẫu tương ứng).

Có cách nào để chỉnh sửa số này comments.xml qua API để đặt nhận xét trong tài liệu Word hay không không phải là có thể?

mẫu "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> 

mẫu "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> 

Trả lời

2

Đây là thông tin nhất mà tôi đã có thể tìm trong khi nghiên cứu vấn đề này với bạn:

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

Lưu ý: Một cách hay để tìm hiểu cách thao tác OOXML từ ứng dụng là thêm nội dung bạn muốn làm việc bằng giao diện người dùng (ví dụ, chèn SmartArt bằng cách bấm Chèn | Minh họa | SmartArt), nhận OOXML cho nội dung bằng cách sử dụng getSelectedDataAsync và sau đó đọc kết quả.

Tôi sẽ thực hiện việc này, sau đó gửi các kết quả đó dưới dạng ooxml bằng setSelectedDataAsync và điều đó sẽ trả lời câu hỏi của bạn. Là văn phòng thông minh, đủ để tạo ra những tài liệu tham khảo chính nó, hoặc là nó không?

COMMENT OLD (Nơi tôi thấy tiền đề đầu tiên của bạn là đúng. Hãy bỏ qua, hoặc đọc cho cười)

Dường như (nếu không muốn nói, không có gì bạn có thể làm gì về nó thông qua các api là) bạn có thể sử dụng hàm setSelectedDataAsync để chuyển các giá trị nhận xét và áp dụng chúng vào nội dung được chọn hiện tại trong tài liệu từ. Dưới đây là hai đoạn phù hợp nhất:

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

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

Từ việc thực hiện coerciontype được sử dụng trong một trong những ví dụ của microsoft và thực tế là coerciontype là một đếm giống như customexmlnodetype ... Nó làm cho cảm giác với tôi rằng điều này sẽ hiệu quả.

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

}

Nhìn lại qua các tài liệu bây giờ tôi tìm coercionType như một tham số tùy chọn dưới đối tượng, và không phải tất cả enumerations. Thật là ngu ngốc !!

Dưới đây là thông tin mà tôi tham khảo:

Kiểm tra này ra: https://msdn.microsoft.com/en-us/library/office/fp142145.aspx

Và đây: https://msdn.microsoft.com/EN-US/library/office/fp142154.aspx

Các vấn đề liên quan