Google表格脚本 - 从活动单元格

时间:2018-06-05 14:12:32

标签: google-apps-script google-sheets

我创建了一个NamedRange并将其用于数据验证。某个细胞。

在我的脚本上,当编辑此单元格时,我想知道某个单元格使用某个NamedRange。

可以从单元格中获取数据验证范围:

SpreadsheetApp.getActiveSheet().getActiveCell()

然而,这不是命名范围。

有什么办法吗?

谢谢!

2 个答案:

答案 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;
}