getRange使用脚本命名范围谷歌电子表格

时间:2012-09-09 19:19:31

标签: google-apps-script google-sheets named-ranges

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

而不是:

     getRange("A4:E7");

A4:E7的区域已被制作为sheet1中名为'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 } );
    }
}

1 个答案:

答案 0 :(得分:14)

https://developers.google.com/apps-script/class_spreadsheet#getRangeByName

自定义函数返回指定范围的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()返回绝对列,而不是范围中单元格的位置。您必须添加代码才能进行调整。