К сожалению, в API Office JS нет способа расширить (или заключить контракт) диапазон или выделение на определенное количество символов. ( Ссылка )
По сравнению с 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();