我正在尝试使用Shared JS API在Word 2013中的一段选定文本后面追加一个超链接。
在没有选择的情况下插入当前光标时,使用OOXML插入超链接可以正常工作。我的问题是'找到'所选文本的结尾以附加OOXML。
仅使用setSelectedDataAsync
覆盖现有文本。我已经尝试将所选文本作为OOXML读取并将超链接XML连接到它但没有成功。
我没有尝试过阅读当前的选择,然后修改那个OOXML,但我更愿意避免。
在Word JS API中,在选择中提供了之前和之后,因此可以直接进行。是否可以在共享API中执行此操作?感谢。
答案 0 :(得分:1)
以下代码示例说明了Marc在上面的评论中描述的方法(有一个例外:它将所选数据作为 Text ,而不是 HTML )。
此代码段使用getSelectedDataAsync
获取所选数据(作为文本),然后附加指向该数据的超链接,并使用setSelectedDataAsync
将该字符串推回到文档(作为 HTML )。
Office.context.document.getSelectedDataAsync(Office.CoercionType.Text,
{ valueFormat: "unformatted" },
function (asyncResult) {
var error = asyncResult.error;
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(error.name + ": " + error.message);
}
else {
// Get selected data.
var dataValue = asyncResult.value;
console.log("Selected data is: " + dataValue);
// Create newText by appending hyperlink to dataValue.
var myHyperlink = "<a href='https://www.bing.com'>https://www.bing.com</a>";
var newText = dataValue + " " + myHyperlink;
console.log("New text is: " + newText);
// Replace selected text with newText value.
Office.context.document.setSelectedDataAsync(newText, { coercionType: "html" },
function (asyncResult) {
var error = asyncResult.error;
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(error.name + ": " + error.message);
}
});
}
});
注意: 将所选数据作为文本获取的一个副作用就像这个代码片段那样,当你回写那个时如果字符串(附加了超链接)到文档,您将丢失以前在所选文本中出现的任何格式(例如:字体颜色,样式等)。如果保留原始选定文本的格式非常重要,则需要将所选数据作为 HTML ,然后将超链接附加到包含最初选定文本的HTML部分,之后将该HTML写回文档。
您可以使用脚本实验室(https://aka.ms/getscriptlab)在Word中快速轻松地尝试此代码段。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,并使用以下GIST URL:https://gist.github.com/kbrandl/8e235fb0ccc190bf42ed9ce1874f5559。