[英]Google Sheets Script: Get Multi-Col/Row Named Range from Current Cell
From other examples, I have a function that returns the name of a Named Range for the current cell - but only if the range consists of a single cell.从其他示例中,我有一个 function 返回当前单元格的命名范围的名称 - 但前提是该范围由单个单元格组成。
I started trying to parse the starting and ending Col and Row of the range, but ran into problems as soon as cols went to more than one character, eg "AA".我开始尝试解析范围的开始和结束 Col 和 Row,但是一旦 cols 出现多个字符,例如“AA”,就会遇到问题。
Then I thought that if I could get the cell's "R1C1" notation, I could use getCell() to test if it exists in the range.然后我想如果我能得到单元格的“R1C1”符号,我可以使用 getCell() 来测试它是否存在于范围内。 However, I can't find an equivalent function of getA1Notation() to get the R1C1 of the current cell.但是,我找不到 getA1Notation() 的等效 function 来获取当前单元格的 R1C1。 How is it obtained pls?请问它是如何获得的?
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);
}
You can get the row index and the column index of a cell using getRow() and getColumn() .您可以使用getRow()和getColumn()获取单元格的行索引和列索引。 Then you can use that to write its R1C1 notation:然后你可以用它来写它的 R1C1 符号:
const r1c1Notation = `R${sheet.getCurrentCell().getRowIndex()}C${sheet.getCurrentCell().getColumn()}`;
getRow()
, getLastRow()
, getColumn()
and getLastColumn()
.确定范围的高度和宽度的方法之一是使用方法getRow()
、 getLastRow()
、 getColumn()
和getLastColumn()
。Sample:样本:
function myFunction() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
var A1Notation = "B5";
for(var i = 0;i < namedRanges.length; i++){
Logger.log(namedRanges[i].getRange().getA1Notation());
var range = namedRanges[i].getRange();
var rangeWidth = range.getWidth();
var rangeHeight = range.getHeight();
for (var j = 1; j <= rangeWidth; j++){
for (var k = 1; k <= rangeHeight; k++){
var A1 = range.getCell(j, k).getA1Notation();
if (A1 == A1Notation){
rangeName = namedRanges[i].getName();
break;
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.