用于对表格进行排序的 Google Sheets 脚本给出错误“单元格引用超出范围”

问题描述 投票:0回答:2

我对 Google Sheets 中的脚本编写相对较新,并且正在尝试编写一些可以分配给按钮以按该表中的第 5 列对表进行排序的内容。我正在使用下面的代码:

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

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

sorting google-sheets
2个回答
13
投票

似乎您正在尝试对第 5 栏 (E) 进行排序,但这不在您的范围内。您的范围中的第一列是第 10 列 (J)。如果你想在 O 列上排序,你需要

range.sort(15)

0
投票

这是应用程序脚本排序功能的一个已知问题。如果您尝试对范围进行排序,如您在此处看到的那样

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 错误异常:单元格引用超出范围

此问题已记录多年(来源: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

© www.soinside.com 2019 - 2024. All rights reserved.