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

标签 ms-word office-js

我有在 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/

相关文章:

c# - 在 C# 中用同一位置的图像替换文本

javascript - 我想在调用 Office.context.ui.displayDialogAsync() 方法时跳过显示消息

ms-word - Microsoft 公式 3.0 中实数集的 "R"符号

utf-8 - Microsoft Word DOC 和 DOCX 文件的字符编码?

excel - Word for Mac - 调用 Excel.Application.Workbooks.Open 时出错 运行时错误 -2146959355 (80080005)

c# - 如何在 ms word 模板中放置标签并用数据库中的数据填充它们

api - Excel-自定义函数,Contoso.ADD42 函数未出现在 Excel 中

c# - Visual Studio 2015 : debugging MVC controller

javascript - 删除 Outlook Web 加载项对话框中的填充

javascript - Office 加载项开发 : Insert image/picture in Word 2016