使用命名范围谷歌电子表格的脚本getRange(getRange with named range

2019-07-31 11:22发布

能否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 } );
    }
}

Answer 1:

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

自定义函数返回的命名范围A1地址:

function myGetRangeByName(n) {  // just a wrapper
  return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getA1Notation();
}

然后,在电子表格的单元格:

=myGetRangeByName("Names")

这将使任何“名称”被定义为进入细胞。 当您重新定义,因为天然气的积极的缓存的“名字”,这将不会更新。 你可以,但是,迫使气体更新每个表计算。

=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()返回绝对列,该范围内的单元格的不是位置。 你必须将代码添加到调整为。



文章来源: getRange with named range google spreadsheet using scripts