getRange
是否可以用于具有命名范围而不是区域
当我似乎这样做的时候,它说论点必须是一个范围。例如,
代替:
getRange("A4:E7");
A4:E7
的区域已纳入表1中名为"Names"的命名范围。
你可以使用吗
var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names");
getRange(tableRange);
或者还有其他方法吗?完整的代码是:
function onEdit(event){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var editedCell = ss.getActiveCell();
var columnToSortBy = 1;
var tableRange = ss.getRangeByName("Names");
if(editedCell.getColumn() == columnToSortBy){
var range = ss.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getrangebynamename
自定义函数返回命名范围的A1地址:
function myGetRangeByName(n) { // just a wrapper
return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getA1Notation();
}
然后,在电子表格上的一个单元格中:
=myGetRangeByName("Names")
这将使任何";名称";定义为进入单元格。当您重新定义";名称,";因为GAS的主动缓存。但是,您可以强制GAS在每个图纸计算中更新它。
=myGetRangeByName("Names",now())
javascript将忽略未使用的参数。
以下代码实现了我认为您的意图。编辑图纸的第一列时,会根据该列对范围进行排序。
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var editedCell = ss.getActiveCell();
var columnToSortBy = 1;
var tableRange = ss.getRangeByName("Names");
if ( editedCell.getColumn() == columnToSortBy ) {
tableRange.sort(columnToSortBy);
}
}
如果将列表移离列A,这将不起作用,因为getColumn()
返回的是绝对列,而不是单元格在范围中的位置。您必须添加代码才能对此进行调整。