在Office-JS中选择后插入文本

时间:2017-11-02 16:00:16

标签: ms-word office-js

我正在尝试使用Shared JS API在Word 2013中的一段选定文本后面追加一个超链接。

在没有选择的情况下插入当前光标时,使用OOXML插入超链接可以正常工作。我的问题是'找到'所选文本的结尾以附加OOXML。

仅使用setSelectedDataAsync覆盖现有文本。我已经尝试将所选文本作为OOXML读取并将超链接XML连接到它但没有成功。

我没有尝试过阅读当前的选择,然后修改那个OOXML,但我更愿意避免。

在Word JS API中,在选择中提供了之前和之后,因此可以直接进行。是否可以在共享API中执行此操作?感谢。

1 个答案:

答案 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