Как создать гиперссылку ID диапазона, # rangeID = XXXXXXXXXX, в Google Таблицах, используя скрипты?

Совсем недавно, Google добавил функцию, где вы можете гиперссылку на определенную ячейку, и это здорово. Для этого вы используете функцию "Вставить ссылку" в определенной ячейке, а затем в раскрывающемся меню вы можете нажать "Выбрать диапазон ячеек для ссылки", где вы затем выбираете ячейку или диапазон, в котором вы хотите ссылаться на. При этом Google генерирует очень удобный (и динамичный) десятизначный "идентификатор диапазона".

Это выглядит примерно так: =HYPERLINK("#rangeid=1234567890","link")

Однако я не могу понять, как создать это с помощью сценария.

Мне кажется странным, что эта функция не существует, так как это можно сделать вручную.

Я могу использовать следующий код для генерации идентификатора листа, что очень удобно при создании гиперссылок для перехода между страницами:

var ss = SpreadsheetApp.getActive(); 
var sheet1 = ss.getSheetByName(name); 
var gid = sheet.getSheetId();
sheet2.getRange("A1").setFormula('=hyperlink("#gid='+gid+'","'name'")');

И я могу использовать следующий код для создания ссылки на определенную ячейку, но она не динамическая и разрывается после вставки строк/столбцов в лист:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var range = ss.getRangeByName("A10");
var sheetID = range.getSheet().getSheetId();
var rangeCode = range.getA1Notation();
sheet2.getRange("J10").setFormula('=hyperlink("https://docs.google.com/spreadsheets/d/'+ss.getId()+'/edit#gid='+sheetID+'&range='+rangeCode+'","link")');

Должен быть способ сделать что-то вроде следующего кода, но в настоящее время я не могу найти способ:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRangeByName("A10");
var rangeID = range.**getRangeID()**;
sheet2.getRange("J10").setFormula('=hyperlink("#rangeID='+rangeID+'","link")');

Я знаю, что в настоящее время getRangeID() не существует в доступных опциях для скрипта Google Apps; Однако есть ли что-то, что выполняет эту функцию? Было бы невероятно полезно, если бы эта команда существовала.

Любая помощь там? Есть ли другой способ сделать это, что я скучаю?

Спасибо за любую помощь!

Ответы

Ответ 1

Это идеальный вариант использования для именованных диапазонов, и он не требует каких-либо изменений в вашей логике скриптов.

var range = ss.getRangeByName("NamedRange1");