sorting - 如何使用 .sort 命令修复 Google 表格自动排序器中的 TypeError?
问题描述
我正在尝试在 google 表格中进行自动分类,但是当我尝试运行我的代码时收到一条错误消息。我在网上搜索了一个解决方案,但只能找到与 JavaScript 相关的东西,我不太确定它们有多相似。我的代码如下所示:
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
["January", "February", "March"].forEach(function (s) {
var sheet = ss.getSheetByName(s);
var range = sheet.getRange('L11:M40').getValues();
var result = range.filter(String);
result.sort([{column: 2, ascending: false}])
我得到的错误信息是这样的:
TypeError: The comparison function must be either a function or undefined
(anonymous) @ Code.gs:35 <--(The result.sort line)
onEdit @ Code.gs:31 <--(The function onEdit line)
如果我理解正确,我需要将 .sort 命令嵌套到另一个函数中,但我不知道该怎么做。我该怎么做呢?我对编程比较陌生,所以我不太确定自己在做什么,尤其是使用 Google App Scripts。
解决方案
您似乎正在尝试使用Range.sort(sortSpecObj)对数组数据进行排序。
由于您已经使用Range.getValues()并使用了 array.filter()获取范围值,因此您的结果变量是一个数组。您可以使用array.sort(),它有一个可选参数compareFunction
,用于定义替代排序顺序。
样品表:
使用 Array.Sort() 的示例代码:
function sortArray() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
var range = sheet.getRange("L1:M5").getValues();
var result = range.filter(String);
Logger.log(result);
result.sort(function(a,b){ return b[1]- a[1]
});
Logger.log(result);
}
输出:
2:38:45 AM Notice Execution started
2:38:46 AM Info [[A, 1.0], [B, 2.0], [C, 3.0], [D, 4.0], [E, 5.0]]
2:38:46 AM Info [[E, 5.0], [D, 4.0], [C, 3.0], [B, 2.0], [A, 1.0]]
2:38:47 AM Notice Execution completed
使用 Range.Sort() 的示例代码:
function sortRange(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
var range = sheet.getRange("L1:M5");
Logger.log(range.getNumColumns());
range.sort({column: 13, ascending: false});
Logger.log(range.getValues());
}
输出:
2:39:53 AM Notice Execution started
2:39:54 AM Info 2.0
2:39:54 AM Info [[E, 5.0], [D, 4.0], [C, 3.0], [B, 2.0], [A, 1.0]]
2:39:55 AM Notice Execution completed
- 请注意,使用Range.sort(sortSpecObj)时,工作表会自动更新/排序。
- 列号不是基于选择的范围,而是基于实际的工作表列。示例如果要对列 M 进行排序,列值应为 13
推荐阅读
- javascript - 此 JS IIFE 是否正确传递事件处理程序的事件和参数?
- python - ImportError:无法导入名称“safe_join”
- .net - .NET Framework 4.7.1 在哪里?
- matlab - 如何从循环中选择特定值以针对一系列值进行绘制?
- reactjs - 从 cdn 响应延迟导入
- javascript - 在 React 中渲染一个组件实例
- javascript - 使用 Google 表格将变量连接到 JSON 调用中
- powershell - 在 Powershell 变量中使用通配符
- node.js - SyntaxError:意外的保留字 sql-cli
- sql-server - 在 QUIET 模式下运行 mssql-server-linux 映像