我有代码可以在Word中查找文本并将结果范围存储在数组中。我能够使用范围数组导航匹配结果。我还希望能够显示范围的周围文本。这与“查找”在Word中的工作方式非常相似。
例如,我想在以下文本中显示Reading
的第二个实例的范围的周围文本(也许前后二十个字符):
“要更改图片在文档中的放置方式,请单击它并在其旁边显示一个用于布局选项的按钮。在处理表时,单击要添加行或列的位置,然后单击加号。在新的“阅读”视图中,阅读也变得更加容易。您可以折叠文档的一部分并专注于所需的文本。如果您需要在到达末尾之前停止阅读,Word会记住您停下的位置-即使在其他设备上。”
这将是输出。
“在新的“阅读”视图中阅读也变得更加容易。您可以折叠部分内容”
我正在使用Visual Studio 2017和Office-js 1.1。
function first() {
ranges[0].select();
ranges[0].font.highlightColor = "aqua";
ranges[0].context.sync();
showSurroundText(ranges[0]);
}
function previous() {
if (index > 0) {
ranges[--index].select();
ranges[index].font.highlightColor = "aqua";
ranges[index+1].font.highlightColor = "yellow";
ranges[index].context.sync();
showSurroundText(ranges[index]);
}
}
function next() {
console.log("Next");
if (index < ranges.length - 1) {
ranges[++index].select();
ranges[index].font.highlightColor = "aqua";
ranges[index-1].font.highlightColor = "yellow";
ranges[index].context.sync();
showSurroundText(ranges[index]);
}
}
function showSurroundText(range:Word.Range){
surroundTextRange = /*need help computing this range */
surroundTextRange.load("text");
$("#output").htmml(surroundTextRange.text);
}
答案 0 :(得分:0)
不幸的是,Office JS API中没有方法可以按一定数量的字符来扩展(或缩小)范围或选择。 (Reference)
与COM API相比,扩大范围是一项复杂的工作。可用方法:
- expandToOrNullObject(range)
- getNextTextRangeOrNullObject(endingMarks, trimSpacing)
- getRange(rangeLocationString)
- getTextRanges
使用getNextTextRangeOrNullObject
,例如,可以通过将.
指定为endingMarks
来获得范围(搜索结果)之后的下一个句子。可以使用getRange
将其“折叠”到起点,以便将搜索范围扩展到下一个句子的开头。
倒退甚至更复杂。一种可能是使所有段落最多到包含搜索词的段落,然后获取该段落的最后一个句子并扩展到该点。
以下代码段演示并提供了开始“调整”所需内容的地方:
let results = context.document.body.search("Reading");
results.load("length");
await context.sync();
//Work with the first found search term
let rngFound = results.items[0];
//Expand to end of sentence
let rngNextSent = rngFound.getNextTextRangeOrNullObject(["."]);
let rngExpAfter = rngNextSent.getRange("Start"); let rngFoundExp = rngFound.expandToOrNullObject(rngExpAfter);
await context.sync();
//Get paragraphs to this point
let rngDocStart = rngFound.parentBody.getRange("Start");
let rngToStart = rngFoundExp.expandToOrNullObject(rngDocStart);
let paras = rngToStart.paragraphs;
paras.load("items");
await context.sync();
//Get the paragraph previous
let nrParas = rngToStart.paragraphs.items.length-2;
let rngPrev = rngToStart.paragraphs.items[nrParas];
//Get the last sentence in that paragraph
let rngParaSent = rngPrev.getTextRanges(["."]); rngParaSent.load("items"); await context.sync(); let rngPrevSent = rngParaSent.items[rngParaSent.items.length - 1];
//Extend the extended range to the last sentence in the previous paragraph
let rngComplete = rngFoundExp.expandToOrNullObject(rngPrevSent);
rngComplete.select();
await context.sync();