我创建了一个NamedRange并将其用于数据验证。某个细胞。
在我的脚本上,当编辑此单元格时,我想知道某个单元格使用某个NamedRange。
可以从单元格中获取数据验证范围:
SpreadsheetApp.getActiveSheet().getActiveCell()
然而,这不是命名范围。
有什么办法吗?
谢谢!
答案 0 :(得分:2)
这样做没有功能。您可以创建自己的功能来检查它 类似的东西:
function getRangeName(A1Notation) {
var rangeName = "";
//get all the name ranges of the sheet
var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getNamedRanges();
// loop on all the names range of the sheet
for(i=0;i<namedRanges.length;i++){
//if it's the same A1 Notation
if(namedRanges[i].getRange().getA1Notation() == A1Notation)
rangeName = namedRanges[i].getName();
}
//will return the name of the range or "" if there is no range
return rangeName;
}
然后,您只需致电getRangeName(SpreadsheetApp.getActiveSheet().getActiveCell().getA1Notation())
即可获得范围名称。
如果您的范围超过一个单元格,则可能需要稍微更新一次
答案 1 :(得分:1)
谢谢Liora - 这有很多帮助!
我的要求是获取一个命名范围的名称,该范围由另一个工作表中的单元格的数据验证使用 - 我改变了你的答案并完成了这个,这是完美的:
function onEdit() {
var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
var rangeName = getRangeName(cell);
Logger.log('The named range is %s', rangeName);
}
function getRangeName(cell) {
var rangeName = "";
if (!cell) return;
var dataValidation = cell.getDataValidation();
if (!dataValidation) return;
var A1Notation = dataValidation.getCriteriaValues()[0].getA1Notation();
//get all the name ranges of the sheet where I put my lists
var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('lists').getNamedRanges();
// loop on all the names range of the sheet
for(i=0;i<namedRanges.length;i++){
//if it's the same A1 Notation
if(namedRanges[i].getRange().getA1Notation() == A1Notation)
rangeName = namedRanges[i].getName();
}
//will return the name of the range or "" if there is no range
return rangeName;
}