我需要在外接程序中突出显示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);
});
答案 0 :(得分:1)
为此您有几种选择。
2)易于实现:)
对于1),请检查以下示例,它不能完全满足您的要求,但是您可以了解如何实现此目的。目标是使用treackedObjects方法(最重要的一点)保存每个范围。在这种情况下,我将创建一个找到范围的数组,然后可以使用它来清理突出显示。请不要忘记调用context.trackedObjects.remove,因为您正在分配内存来临时存储这些对象。顺便说一下,在我的示例中,请确保包含ID为“ FoundRanges”的组合itesm。
这是您可以使用的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)
})
}