谷歌表格脚本排序表格时出现错误“单元格引用超出范围”

8

我相对于Google Sheets的脚本编写比较新手,正在尝试编写一个可以分配给按钮的脚本以便在表格中按第5列对该表格进行排序。我正在使用下面的代码:

    function sort() {
       var ss = SpreadsheetApp.getActiveSpreadsheet();
       var sheet = ss.getSheetByName("items");
       var range = sheet.getRange("J2:O13");
       range.sort(5);
    }

然而,当我将其分配给按钮并单击该按钮时,我收到错误消息“单元格引用超出范围”。这可能是一个愚蠢的问题,但提前感谢任何帮助。
2个回答

13

看起来你想在第五列(E)上排序,但是它不在你的范围内。你范围内的第一列是第十列(J)。如果你想在第O列上排序,你需要

range.sort(15)

2
天哪,这太不直观了。 数值值暗示与选择的范围的相对性,那么为什么要坚持使用数字呢,而不是说range.sort("J")? 相反,如果列号与整个电子表格相关,则如何“超出范围”?这还要求传递偏移量以重复使用排序函数。 这在许多方面都是错误的! 哎。 - tudor -Reinstate Monica-
你是对的,@tudor。这真的很不直观。我刚刚浪费了一个小时的时间搜索问题,因为我的表格很大,所以没有任何错误提示... - Flo354
1
我现在使用 range.getColumn() 来获取我的范围的基础列,然后添加一个偏移量来到达我的范围内的列。是的,这非常不直观。 - Craig Trader

0
这是App Script排序功能的已知问题。如果你尝试像你在这里看到的那样原地对一个范围进行排序,那么就会出现这个问题。
function autoSort() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("mySheet");
  
  const range = sheet.getRange("A1:Z");
  
  range.sort({
    column: 4,
    ascending: false
  );
}

你可能会遇到错误range.sort Error Exception: Cell reference out of range
这个问题已经有多年的记录(来源:https://issuetracker.google.com/issues/36760889?pli=1)。
为了规避这个问题,请使用标准的Javascript排序函数,结合获取和设置范围的值的能力,如下所示:
function autoSort() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("mySheet");
  
  const range = sheet.getRange("A1:Z");
  
  range.setValues(range.getValues().sort((a, b) => b[3] - a[3]));
}

在这里,我们使用了对范围值类型的知识,将其表示为二维数组,表示工作表中的单元格,并使用标准的Javascript排序函数按照之前的意图对第四列进行降序排序。
要了解更多关于编写有效排序函数的信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接