更新的问题更具体...您是否可以编程方式在MS Word中的OOXML注入注释中创建HTML链接?
我能够插入自定义注释到使用几个不同的策略的Word文档(见Insert OOXML comment with track changes)或下面的代码(这是传递一个文件位置对此事发表评论.xml和'msg'或要插入的注释)。
但我看不到如何在OOXML中包含可点击的链接。
我可以得到纯文本链接,如果它们是'味精'的一部分...但传递HTML会破坏XML并引发错误。
Word中的链接注释实际上存储在comment.xml.rels中,并且只在实际注释的XML中引用...所以您可能必须将数据追加到comment.xml.rels以编程方式创建一条链接。
任何人都处理了这一点,并能够包括可点击的链接?
这是令人沮丧的......一旦出现包含链接的纯文本评论,您所要做的就是在链接之后键入一个空格,并且它变得可点击。我试图避免这个手册(和丑陋)的一步。
function insertComment2(fileName, msg) {
var selectedText = "";
var searchText = "";
var replaceText = "";
var myXML = "";
Office.context.document.getSelectedDataAsync(
Office.CoercionType.Text,function (result) {
if (result.status == Office.AsyncResultStatus.Failed) {
console.log('Action failed. Error: ' + result.error.message);
}
else {
selectedText = result.value;
console.log('Selected data: ' + selectedText);
var myOOXMLRequest = new XMLHttpRequest();
myOOXMLRequest.open('GET', fileName, false);
myOOXMLRequest.send();
if (myOOXMLRequest.status === 200) {
myXML = myOOXMLRequest.responseText;
console.log("XML before insertion: " + myXML);
}
// selectedText = getDataFromSelection();
var searchRangeTxt = "<w:r><w:t xml:space=\"preserve\">selectedText</w:t></w:r>"
var replaceRangeTxt = "<w:r><w:t xml:space=\"preserve\">" + selectedText + "</w:t></w:r>"
myXML = myXML.replace(searchRangeTxt, replaceRangeTxt);
msg = "<![CDATA[" + msg + "]]>";
var searchText = "<w:p><w:r><w:t>comment</w:t></w:r></w:p>";
var replaceText = "<w:p><w:r><w:t>" + msg + "</w:t></w:r></w:p>";
myXML = myXML.replace(searchText, replaceText);
// var timeStamp = Date().toLocaleString();
var currentdate = new Date();
var timeStamp = currentdate.getFullYear() + "-"
+ ("0" + (currentdate.getMonth() + 1)).slice(-2) + "-"
+ ("0" + currentdate.getDate()).slice(-2) + "T"
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds() + "Z";
console.log('Trying to get time and think it is: ' + timeStamp);
var searchDate = "<w:comment w:id=\"0\" w:author=\"Proofreading International\" w:date=\"DATE\" w:initials=\"PRI\">";
var replaceDate = "<w:comment w:id=\"0\" w:author=\"Proofreading International\" w:date=\"" + timeStamp + "\" w:initials=\"PRI\">";
myXML = myXML.replace(searchDate, replaceDate);
Office.context.document.setSelectedDataAsync(myXML, { coercionType: Office.CoercionType.Ooxml }, function (asyncResult) {
if (asyncResult.status == "failed") {
console.log("Action failed with error: " + asyncResult.error.message);
console.log('Failure in inserting XML!' + myXML);
}
else {
console.log('success in inserting XML!' + myXML);
}
});
}
});
}
更新中...
插入下面的 'comment.xml' 文件确实产生在评论一个hoverable超级链接...但它是一个空的超链接,并没有按不接受对该部分的ID引用...
对于纯文本/空Word文档,插入注释并不会创建comments.xml.rels文件。只有在手动创建带有链接的评论时才会创建该文件。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package
xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
<pkg:xmlData>
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/_rels/comments.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="http://www.google.com/" TargetMode="External"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" Target="comments.xml"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
<pkg:xmlData>
<w:document
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:commentRangeStart w:id="0"/>
<w:r><w:t xml:space="preserve">selectedText</w:t></w:r>
<w:r>
<w:commentReference w:id="0"/>
</w:r>
<w:commentRangeEnd w:id="0"/>
</w:p>
</w:body>
</w:document>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/comments.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml">
<pkg:xmlData>
<w:comments xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:comment w:id="0" w:author="Proofreading International" w:date="DATE" w:initials="PRI">
<w:p>
<w:r>
<w:t>
New comment
</w:t>
</w:r>
<w:hyperlink Id="rId2" w:history="1">
<w:r>
<w:rPr>
<w:rStyle w:val="Hyperlink"/>
</w:rPr>
<w:t>Google</w:t>
</w:r>
</w:hyperlink>
</w:p>
</w:comment>
</w:comments>
</pkg:xmlData>
</pkg:part>
</pkg:package>
噢,我的 - 谢谢胡安。 – 11teenth
我不得不填补很多 - 我的技能很薄弱。 但我得到一个环节的工作... 两个主要变化: 的comment.xml.rels封装元件发生下面的评论文字... 并有一些其他风格的标签......像 我已经做了一些波兰工作并理顺了格式化......但我想我正在路上。 –
11teenth
很高兴听到!现在你可以处理任何OOXML :) –