我对 Google Sheets 中的脚本编写相对较新,并且正在尝试编写一些可以分配给按钮以按该表中的第 5 列对表进行排序的内容。我正在使用下面的代码:
function sort() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("items");
var range = sheet.getRange("J2:O13");
range.sort(5);
}
但是,当我将其分配给按钮并单击该按钮时,我收到错误消息“单元格引用超出范围”。这可能是一个愚蠢的问题,但提前感谢您的帮助。
似乎您正在尝试对第 5 栏 (E) 进行排序,但这不在您的范围内。您的范围中的第一列是第 10 列 (J)。如果你想在 O 列上排序,你需要
range.sort(15)
这是应用程序脚本排序功能的一个已知问题。如果您尝试对范围进行排序,如您在此处看到的那样
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