gpt4 book ai didi

ms-word - 在 Office-js 中获取范围周围的文本

转载 作者:行者123 更新时间:2023-12-04 04:23:50 24 4
gpt4 key购买 nike

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

enter image description here

例如,我想显示 Reading 的第二个实例的范围的周围文本(可能前后二十个字符)在以下文本中:

"要更改图片在文档中的大小,请单击它,旁边会出现一个布局选项按钮。在表格上工作时,单击要添加行或列的位置,然后单击加号. 在新的“阅读” View 中,阅读也更轻松。您可以折叠文档的某些部分并专注于您想要的文本。如果您需要在阅读结束前停止阅读,Word 会记住您离开的地方 - 甚至在另一个设备。”

这将是输出。

“在新的阅读 View 中阅读也更容易。您可以折叠部分”

我使用的是 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);
}

最佳答案

不幸的是,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();

关于ms-word - 在 Office-js 中获取范围周围的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58357313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com