20

可以getRange使用命名范围而不是区域吗?
当我似乎这样做时,它说参数必须是一个范围。例如,

代替:

     getRange("A4:E7");

的区域A4:E7已在 sheet1 中制成名为“名称”的命名范围。

你可以使用:

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 } );
    }
}
4

1 回答 1

24

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()返回的是绝对列,而不是范围内单元格的位置。您将不得不添加代码来进行调整。

于 2012-09-28T04:28:31.057 回答