如何突出显示选定范围内的特定单词?

时间:2019-04-06 17:14:00

标签: ms-office office-js office-addins word-addins

基本上,我必须突出显示我在数组中收到的单词。在控制台上,第一次迭代后,我收到以下错误:

未处理的拒绝PropertyNotLoaded:属性“ items”不可用。在读取属性值之前,请在包含的对象上调用load方法,并在关联的请求上下文上调用“ context.sync()”。

代码如下:

 var color = systemService.getColor(item.gradeText);
 var filteredWords = $(item.words).not($scope.stopList).get();

            Word.run(function (context) {
                var selectedRange = context.document.getSelection();
                context.load(selectedRange, "text");
                return context.sync().then(function () {
                    for (var i = 0; i < filteredWords.length; i++) {

                        var searchResults = null;

                        searchResults = selectedRange.search(filteredWords[i], { ignorePunct: true, matchCase: false, matchWholeWord: true });

                        context.load(searchResults, 'font');

                        context.sync().then(function () {
                            for (var i = 0; i < searchResults.items.length; i++) {
                                searchResults.items[i].font.color = color;
                                searchResults.items[i].font.bold = true;
                            }

                        });
                    }
                }).then(context.sync);

            })
               .catch(function (error) {
                   console.log('Error: ' + JSON.stringify(error));
                   if (error instanceof OfficeExtension.Error) {
                       console.log('Debug info: ' + JSON.stringify(error.debugInfo));
                   }
               });

2 个答案:

答案 0 :(得分:1)

我发现在第二个return前面添加关键字context.sync可以解决问题。

答案 1 :(得分:-1)

谢谢您的回答,我可以通过以下链接了解有关此功能的信息:

Best way to write loops with promises (ctx.sync) in JavaScript API for Office