Google 工作表脚本:从当前单元格获取 Multi-Col/Row 命名范围
Google Sheets Script: Get Multi-Col/Row Named Range from Current Cell
根据其他示例,我有一个函数 returns 当前单元格的命名范围的名称 - 但前提是 运行ge 由单个单元格组成。
我开始尝试解析 运行ge 的开始和结束 Col 和 Row,但是一旦 cols 超过一个字符,例如“AA”,运行 就会出现问题。
然后我想如果我能得到单元格的“R1C1”符号,我可以使用 getCell() 来测试它是否存在于 运行ge 中。但是,我找不到 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);
}
您可以使用getRow() and getColumn()获取单元格的行索引和列索引。然后你可以用它来写它的 R1C1 符号:
const r1c1Notation = `R${sheet.getCurrentCell().getRowIndex()}C${sheet.getCurrentCell().getColumn()}`;
如果我对你的理解是正确的,你想遍历命名区域的每个单元格以将单元格的 A1 表示法与变量进行比较
- 为此,您可以在嵌套循环中使用方法 range.getCell() - 因为范围是二维对象。
- 建立范围的高度和宽度的方法之一是使用方法
getRow()
、getLastRow()
、getColumn()
和 getLastColumn()
.
样本:
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;
}
}
}
}
}
根据其他示例,我有一个函数 returns 当前单元格的命名范围的名称 - 但前提是 运行ge 由单个单元格组成。
我开始尝试解析 运行ge 的开始和结束 Col 和 Row,但是一旦 cols 超过一个字符,例如“AA”,运行 就会出现问题。
然后我想如果我能得到单元格的“R1C1”符号,我可以使用 getCell() 来测试它是否存在于 运行ge 中。但是,我找不到 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);
}
您可以使用getRow() and getColumn()获取单元格的行索引和列索引。然后你可以用它来写它的 R1C1 符号:
const r1c1Notation = `R${sheet.getCurrentCell().getRowIndex()}C${sheet.getCurrentCell().getColumn()}`;
如果我对你的理解是正确的,你想遍历命名区域的每个单元格以将单元格的 A1 表示法与变量进行比较
- 为此,您可以在嵌套循环中使用方法 range.getCell() - 因为范围是二维对象。
- 建立范围的高度和宽度的方法之一是使用方法
getRow()
、getLastRow()
、getColumn()
和getLastColumn()
.
样本:
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;
}
}
}
}
}