根据内容查询返回命名范围

时间:2019-01-24 15:56:05

标签: google-apps-script google-sheets

我正在设置一个脚本,该脚本将通知人们计划在哪几天工作。我有一个日历,设置了每天的命名范围(block1,block2等)。我需要脚本在名称列表中查找,并针对每个名称查询它出现在哪个块中。

例如: Bill的名字出现在1,3,5块中。因此,对他来说,它将返回“ Block 1,Block 2,Block 3”

我能够从a1表示法和相反的名称中提取名称,并查询字符串出现在哪个单元格中,我的问题是弥合该单元格与其出现的范围之间的差距。

1 个答案:

答案 0 :(得分:0)

这是我库中的一组函数,用于检查单元格是否在给定范围内,甚至访问该组命名范围。

function IsInRange(checkRange, targetCell) {
  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;

  //--- the target cell is in the range!
  return true;
}

function IsInNamedRange(checkCell) {
  var namedRanges = SpreadsheetApp.getActive().getNamedRanges();
  for (var index = 0; index < namedRanges.length; ++index) {
    if (IsInRange(namedRanges[index].getRange(), checkCell)) {
      var rangeName = namedRanges[index].getName();
      return rangeName;
    }
  }
  return "";
}

function main() {
  var selectedCell = SpreadsheetApp.getActive().getActiveCell();
  var result = IsInNamedRange(selectedCell);
  if (result == "") {
    Logger.log('the selected cell ' + selectedCell.getA1Notation() + ' is not in a named range');
  } else {
    Logger.log('the selected cell ' + selectedCell.getA1Notation() + ' is in the range named ' + result);
  }
}