Искал именованный диапазон через скрипт
Я с трудом пытаюсь собрать сценарий для следующего:
По сути, я пытаюсь создать пользовательский интерфейс меню, который позволил бы пользователю вводить именованный диапазон в диалоговом окне приглашения, а затем выполнять поиск по сценарию, переходить к этому диапазону и выделять его в рабочей книге, если он существует. Очень похоже на выбор диапазона из контейнера боковых панелей именованных диапазонов.
Моя проблема с использованием контейнера боковой панели именованных диапазонов для поиска существующего диапазона заключается в том, что у меня есть более 100 именованных диапазонов, которые мне нужно прокрутить, поскольку контейнер боковой панели именованных диапазонов не сортируется по алфавиту.
Дайте мне знать, если это имеет смысл или нуждается в дополнительной ясности. Я высоко ценю любую помощь или указатель в правильном направлении!
РЕДАКТИРОВАТЬ: После исследований и небольшой проб и ошибок, вот что я собрал. В настоящее время он активирует диапазон на листе на основе быстрого ввода.
Однако в настоящее время я пытаюсь расширить сценарий, чтобы я мог искать именованный диапазон из другого листа и перейти к нему. Я борюсь с логикой зацикливания.
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Search Named Ranges')
.addItem('Search', 'showPrompt')
.addToUi();
}
function showPrompt() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var result = ui.prompt(
'Search for a named range',
'Enter Named Range:',
ui.ButtonSet.OK_CANCEL);
// Process the user's response.
var button = result.getSelectedButton();
var RangeToSearch = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
// User searched for a named range
sh.setActiveSelection(RangeToSearch)
// IF RANGE ISN'T ON ACTIVESHEET, NEXT SHEET
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
}
}
1 ответ
Это позволит вам ввести имя диапазона. Если он существует, он найдет и перейдет к нему.
function findNameRange()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var nrs=ss.getNamedRanges();
if(nrs.length>0)
{
var resp=SpreadsheetApp.getUi().prompt('Name of Range to Search for:', 'Enter Name of Named Range to Search for.', SpreadsheetApp.getUi().ButtonSet.OK);
var target=resp.getResponseText();
if(target)
{
for(var i=0;i<nrs.length;i++)
{
if(target==nrs[i].getName())
{
var rg=nrs[i].getRange();
rg.activate();
break;
}
}
}
}
else
{
SpreadsheetApp.getUi().alert('No Named Ranges');
}
}