通过脚本搜索命名范围

时间:2017-10-22 00:55:03

标签: google-apps-script google-sheets named-ranges

我正在努力拼凑以下内容的脚本:

本质上,我尝试创建一个菜单UI,允许用户在提示对话框中输入命名范围,然后进行脚本搜索,转到并突出显示工作簿中的该范围(如果存在)。就像从命名范围侧边栏容器中选择范围一样。

使用命名范围侧边栏容器查找现有范围的问题是我有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 个答案:

答案 0 :(得分:0)

这将允许您输入范围名称。如果它存在,它将找到并导航到它。

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');
  }
}