Искал именованный диапазон через скрипт

Я с трудом пытаюсь собрать сценарий для следующего:

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

Моя проблема с использованием контейнера боковой панели именованных диапазонов для поиска существующего диапазона заключается в том, что у меня есть более 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');
  }
}
Другие вопросы по тегам