首页 > 解决方案 > 谷歌表格脚本:从当前单元格获取多列/行命名范围

问题描述

从其他示例中,我有一个函数返回当前单元格的命名范围的名称 - 但前提是该范围由单个单元格组成。

我开始尝试解析范围的开始和结束 Col 和 Row,但是一旦 cols 出现多个字符,例如“AA”,就会遇到问题。

然后我想如果我能得到单元格的“R1C1”符号,我可以使用 getCell() 来测试它是否存在于范围内。但是,我找不到 getA1Notation() 的等效函数来获取当前单元格的 R1C1。请问它是如何获得的?

function c_GetCellNamedRange() {
  const ui = SpreadsheetApp.getUi();
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const cell = sheet.getCurrentCell().getA1Notation();
  ui.alert("Current Cell: " + cell);

  //get all the name ranges of the spreadsheetsheet
  var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
  // loop through all the names range of the sheet
  for(i=0;i<namedRanges.length;i++){
  
/*  
    // this only works if range is a single cell! How to loop through?
    if(namedRanges[i].getRange().getA1Notation() == A1Notation) {
      rangeName = namedRanges[i].getName();
      break;
    }
*/
    // get the current cell R1C1 notation, then use getCell() to test if
    // it exists in the named range?
    //var rv = namedRanges[i].getCell(cell.getRow(), cell.getColumn())
    var rv = namedRanges[i].getCell(cell.getRowIndex(), cell.getColumn())
    if (!rv ) {
      rangeName = namedRanges[i].getName();
      break;
    }

  }

  if ( !rangeName ) rangeName = "none"
  ui.alert("Current Cell:   " + cell + " \r\n\r\n Named Range:   " + rangeName);
}

标签: google-apps-scriptnamed-ranges

解决方案


您可以使用getRow()getColumn()获取单元格的行索引和列索引。然后你可以用它来写它的 R1C1 符号:

const r1c1Notation = `R${sheet.getCurrentCell().getRowIndex()}C${sheet.getCurrentCell().getColumn()}`;

推荐阅读