我正在尝试根据单列中的值和自定义排序顺序对Google Sheets电子表格中的一系列数据进行排序。我可以对数据进行排序,但我不知道如何设置排序的优先级(除了按字母顺序或按字母顺序反转)。我想根据下面指出的顺序进行排序,但显然我现在的排序只是按字母顺序进行的。非常感谢您的帮助!
function onEdit() {
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
//sort based on priority
var columnToSortBy = 4;
var tableRange = "A2:Q1000";
var SortOrder = [
{name: "Urgent", value:1},
{name: "High Priority", value:2},
{name: "Moderate Priority", value:3},
{name: "No deadline", value:4},
{name: "Complete", value:5}
];
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } ); //this needs to be sorted based on priority level, not
}
}
发布于 2018-01-30 08:06:44
GAS文档似乎没有引用自定义排序顺序。您可以从范围中获取值,通过将自定义比较器函数传递给Array.prototype的“sort”方法对它们进行排序,最后使用排序后的数组覆盖范围。
下面的示例假设第一个工作表中有一列需要根据'sortBy‘对象设置的优先级进行排序。
var sheet = SpreadsheetApp.getActive().getSheets()[0];
var range = sheet.getRange(1, 1, sheet.getLastRow(), 1);
var values = range.getValues();
var sortBy = {
"a": 2,
"b": 0,
"c": 4,
"d": 1,
"e": 3
};
values.sort(function(a, b){
return sortBy[[a][0]] - sortBy[[b][0]];
});
range.setValues(values);
这是升序排序-为了颠倒顺序,更改比较器函数,从下一个元素中减去当前元素的优先级。
return sortBy[[b][0]] - sortBy[[a][0]];
https://stackoverflow.com/questions/48509394
复制相似问题