我正在努力拼凑以下内容的脚本:
本质上,我尝试创建一个菜单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.
}
}
答案 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');
}
}