- Вы хотите подтвердить, находится ли текущая позиция курсора внутри в namedRange в Документе Google.
- Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого примера сценария? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Обход:
В этом обходном пути я проверял, включена ли позиция курсора в namedRange, сравнивая индексы абзаца namedRange и позиции курсора.
Расход:
Ход выполнения сценария следующий.
- Получить индексы абзаца namedRange.
- В этом примере сценария, из вашего вопроса, используется namedRange ID.
- В этом случае может быть несколько абзацев, включая таблицу, список и т. Д. Таким образом, все индексы в namedRange извлекаются.
- Получить индекс абзаца позиции курсора.
- Получить индекс абзаца выбранного диапазона.
- Этот пример сценария также проверяет, находится ли выбранный диапазон в namedRange. Потому что, когда текст выделен,
cursor
становится null
.
- Если курсор или выбранный диапазон остаются в namedRange,
myFunction()
возвращает true
.
- Если курсор или выбранный диапазон не остаются в namedRange,
myFunction()
возвращает false
.
- Также вы можете подтвердить это в журнале.
Пример сценария:
Перед использованием этого скрипта, пожалуйста, установите namedRange ID.
function myFunction() {
var nameRangeId = "###"; // Please set namedRange ID here.
var getIndex = function(doc, e) {
while (e.getParent().getType() != DocumentApp.ElementType.BODY_SECTION) e = e.getParent();
return doc.getBody().getChildIndex(e);
};
var doc = DocumentApp.getActiveDocument();
// For namedRange
var namedRange = doc.getNamedRangeById(nameRangeId);
if (namedRange) {
var indexOfNamedRange = namedRange.getRange().getRangeElements().map(function(e) {return getIndex(doc, e.getElement())});
} else {
throw new Error("No namedRange.");
}
var name = namedRange.getName();
// For cursor
var cursor = doc.getCursor();
if (cursor) {
var indexOfCursor = getIndex(doc, cursor.getElement());
if (~indexOfNamedRange.indexOf(indexOfCursor)) {
Logger.log("Inside of %s", name);
return true;
}
Logger.log("Outside of %s", name);
return false;
}
// For select
var select = doc.getSelection();
if (select) {
var indexOfSelect = select.getRangeElements().map(function(e) {return getIndex(doc, e.getElement())});
if (indexOfSelect.some(function(e) {return ~indexOfNamedRange.indexOf(e)})) {
Logger.log("Inside of %s", name);
return true;
}
Logger.log("Outside of %s", name);
return false;
}
throw new Error("No cursor and select.");
}
Примечание:
- В этом сценарии, когда текст выбран в Документе, позиция курсора не может быть получена. Поэтому я добавил функцию проверки выбранного диапазона. Если вы не хотите проверять выбранный диапазон, удалите скрипт
// For select
.
- В этом сценарии, даже только один индекс выбранного диапазона включен в namedRange,
true
возвращается. Об этом, пожалуйста, измените для вашей ситуации.
- На данном этапе этот сценарий не предполагает разделы верхнего и нижнего колонтитула.
Ссылки:
Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, я прошу прощения.