Ms word 获取范围';Office js中的周围文本

Ms word 获取范围';Office js中的周围文本,ms-word,office-js,Ms Word,Office Js,我有在Word中查找文本并将结果范围存储在数组中的代码。我能够使用范围数组导航匹配结果。我还希望能够显示一个范围的周围文本。这与Find在Word中的工作方式非常相似 例如,我想在下面的文本中显示读取的第二个实例范围的周围文本(前后可能有20个字符): “若要更改图片在文档中的显示方式,请单击它,它旁边会显示一个布局选项按钮。”。处理表格时,请单击要添加行或列的位置,然后单击加号。在新的阅读观中,阅读也更容易。您可以折叠文档的某些部分,并将焦点放在所需的文本上。如果您需要在阅读结束前停止阅读,

我有在Word中查找文本并将结果范围存储在数组中的代码。我能够使用范围数组导航匹配结果。我还希望能够显示一个范围的周围文本。这与Find在Word中的工作方式非常相似

例如,我想在下面的文本中显示
读取
的第二个实例范围的周围文本(前后可能有20个字符):

“若要更改图片在文档中的显示方式,请单击它,它旁边会显示一个布局选项按钮。”。处理表格时,请单击要添加行或列的位置,然后单击加号。在新的阅读观中,阅读也更容易。您可以折叠文档的某些部分,并将焦点放在所需的文本上。如果您需要在阅读结束前停止阅读,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]。font.highlightColor=“aqua”;
范围[0]。上下文。同步();
showSurroundText(范围[0]);
}
函数previous(){
如果(索引>0){
范围[--index].select();
范围[index].font.highlightColor=“aqua”;
范围[index+1].font.highlightColor=“黄色”;
范围[index].context.sync();
showSurroundText(范围[索引]);
}
}
函数next(){
控制台日志(“下一步”);
如果(索引
不幸的是,Office JS API中没有方法将范围或选择扩展(或收缩)一定数量的字符。()

与COM API相比,扩展范围是一项复杂的任务。可用的方法有:

 - expandToOrNullObject(range)
 - getNextTextRangeOrNullObject(endingMarks, trimSpacing)
 - getRange(rangeLocationString)
 - getTextRanges
使用
getnextterrangeornullobject
可以通过指定
作为
结束标记来获取范围(搜索结果)后面的下一句话。这可以是“折叠”使用
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();