简体   繁体   English

使用脚本获取具有命名范围谷歌电子表格的 getRange

[英]getRange with named range google spreadsheet using scripts

Can the getRange be used to have a named range instead of an area? getRange可以用于命名范围而不是区域吗?
When I seem to do it, it says the argument must be a range.当我似乎这样做时,它说参数必须是一个范围。 For example,例如,

Instead of:代替:

     getRange("A4:E7");

The area of A4:E7 has been made into a named range called 'Names' in sheet1. A4:E7的区域已在 sheet1 中成为名为“Names”的命名范围。

Could you perhaps use:你能不能用:

var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names");
getRange(tableRange);

Or is there any other way of doing it.或者有没有其他方法可以做到这一点。 The full code is:完整代码是:

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 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getrangebynamename

Custom function returning A1 address of named range:返回命名范围的 A1 地址的自定义函数:

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

Then, in a cell on the spreadsheet:然后,在电子表格的单元格中:

=myGetRangeByName("Names")

This would put whatever "Names" is defined as into the cell.这会将任何定义为“名称”的内容放入单元格中。 It will NOT update when you redefine "Names," because of GAS's aggressive caching.由于 GAS 的主动缓存,它不会在您重新定义“名称”时更新。 You can, however, force GAS to update it on every sheet calculation.但是,您可以强制 GAS 在每次工作表计算时更新它。

=myGetRangeByName("Names",now())

The javascript will ignore the unused parameter. javascript 将忽略未使用的参数。

The following code does what I think you intend.以下代码执行我认为您的意图。 When the first column of the sheet is edited, it sorts the range based on that column.编辑工作表的第一列时,它会根据该列对范围进行排序。

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

This will NOT work if you move the list off column A, because getColumn() returns the absolute column, not the location of the cell in the range.如果您将列表移出 A 列,这将不起作用,因为getColumn()返回绝对列,而不是区域中单元格的位置。 You would have to add code to adjust for that.您将不得不添加代码来进行调整。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM