【问题标题】:Add/Remove Highlights to the Words in MS Office Word document OfficeJS向 MS Office Word 文档 OfficeJS 中的单词添加/删除突出显示
【发布时间】:2018-12-06 02:42:31
【问题描述】:

我需要在我的插件中突出显示 Word 文档中的单词,当用户需要删除插件制作的突出显示时,应该可以只删除插件制作的突出显示。 不应删除用户制作的亮点。

现在我可以在我的插件中用红色突出显示单词,当用户想要删除突出显示时,即使用户突出显示也被删除。

下面是我的代码:

//Add highlights
return context.sync().then(function () {
// Queue a set of commands to change the font for each found item.
for (var i = 0; i < searchResults.items.length; i++) {
    searchResults.items[i].font.color = 'red';
    searchResults.items[i].font.underline = 'wave';
}
return context.sync();
});

//Remove highlights
Word.run(function (context) {
            // Create a proxy object for the document body.
            var body = context.document.body;

            // Queue a commmand to clear the contents of the body.
            body.load("font");

            return context.sync().then(function () {
                // Queue a set of commands to change the font for each found item.
                body.font.color = 'black';
                body.font.underline = 'None';
                return context.sync();
            })
                .catch(errorHandler);
        });

【问题讨论】:

  • 如果这是我推荐的 COM API 以 书签 突出显示的范围。 JS API 不(还?)支持书签,因此最好将代码突出显示的范围放入 ContentControl 中。将内容控件的外观格式化为“隐藏”,这样它们对用户来说就不会“明显”。您还想将它们设置为“cannotDelete = true”。因此,当代码删除突出显示时,它只对突出显示文本时创建的内容控件之一中的内容这样做。移除高亮也会移除内容控件。
  • 你能在 remove highlight 方法开始时重复原来的搜索,然后取消突出显示结果吗? IF 用户创建了符合搜索条件的新内容,并且 if 用户手动突出显示它,那么它也不会突出显示。这可以接受吗?
  • 到目前为止,即使这样也更好@RickKirkham

标签: jquery ms-word office-js


【解决方案1】:

你有几个选择。

  1. 您可以存储突出显示的范围。
  2. 您可以使用不可见的内容控件包装范围结果(如 Cindy 在她的评论中建议的那样), 创建一个标签,然后遍历那些内容控件(使用通过标签方法获取的内容控件)来取消格式化 您的亮点(并删除内容控件。

2) 实现起来很简单:)

对于 1) 请查看以下示例,它并没有完全满足您的需求,但您可以了解如何实现这一目标。目标是使用 treackedObjects 方法保存每个范围,这是最重要的位。在这种情况下,我正在创建一个找到的范围数组,然后您可以使用它来清理您的亮点。请不要忘记调用 context.trackedObjects.remove,因为您正在分配内存来临时存储这些对象。顺便说一下,在我的示例中,请确保包含一个 ID 为“FoundRanges”的组合项

这是您可以使用的script lab snippet

function loadCombo() {
    Word.run(function (context) {
        var rangesAr = [];
        var currentlySelectedIndex = 0;
        var myRanges = context.document.body.search("Word");
        context.load(myRanges, { expand: 'font' });
        return context.sync()

            .then(function () {
                var myCombo = document.getElementById("FoundRanges");

                for (var i = 0; i < myRanges.items.length; i++) {
                    var myItem = document.createElement("option");
                    myItem.text = myRanges.items[i].text
                    myCombo.add(myItem);
                    var newRange = myRanges.items[i].getRange();
                    rangesAr.push(newRange);
                    context.trackedObjects.add(newRange);
                   
                }
                $('#FoundRanges').change(function () {
                    
                    rangesAr[this.selectedIndex].font.bold = true;
                    currentlySelectedIndex = this.selectedIndex;
                    return context.sync()
                        .catch(function (e) {
                           console.og(e.message);
                        })
                });
                return context.sync()
            })
            
    }).catch(function (e) {
        console.log(e.message)
    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多