getRange与命名的范围谷歌电子表格使用脚本 [英] getRange with named range google spreadsheet using scripts

查看:181
本文介绍了getRange与命名的范围谷歌电子表格使用脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以使用 getRange 命名范围而不是区域吗?

当我似乎这样做时,它表示参数必须是一个范围。
例如,

不是:



  getRange(A4:E7); 

面积 A4:E7 已在sheet1中创建了一个名为'Names'的范围。



您可以使用:

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

或者还有其他方法可以做到这一点。完整的代码是:
$ b

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


解决方案

< a href =https://developers.google.com/apps-script/class_spreadsheet#getRangeByName> https://developers.google.com/apps-script/class_spreadsheet#getRangeByName



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

pre $函数myGetRangeByName只是一个包装
返回SpreadsheetApp.getActiveSpreadsheet()。getRangeByName(n).getA1Notation();
}

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

  = myGetRangeByName(姓名)

这会将任何名称定义为单元格。由于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);




$ b

如果将列表移出列,这将不起作用A,因为 getColumn()返回绝对列,而不是范围内单元格的位置。您必须添加代码才能进行调整。


Can the getRange be used to have a named range instead of an area?
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.

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/class_spreadsheet#getRangeByName

Custom function returning A1 address of named range:

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. You can, however, force GAS to update it on every sheet calculation.

=myGetRangeByName("Names",now())

The javascript will ignore the unused parameter.

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. You would have to add code to adjust for that.

这篇关于getRange与命名的范围谷歌电子表格使用脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆