Google Sheets实现按状态分组并嵌套优先级排序的脚本改造需求
Google Sheets 任务列表自定义排序脚本实现
核心思路
因为你的排序规则是自定义优先级(不是默认字母顺序),所以给status和priority分别设置权重值,通过权重比较实现先按status分组,组内按priority排序的效果:
status权重顺序:new(1) > assigned(2) > in progress(3) > completed(4) > rejected(5)priority权重顺序:critical(1) > high(2) > normal(3) > low(4)
完整代码
function customTaskSort() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getDataRange(); const values = range.getValues(); // 取出表头(如果你的表格第一行是表头,没有的话删掉这行和后面的unshift) const header = values.shift(); // 定义自定义排序权重 const statusWeight = { "new": 1, "assigned": 2, "in progress": 3, "completed": 4, "rejected": 5 }; const priorityWeight = { "critical": 1, "high": 2, "normal": 3, "low": 4 }; // 自定义排序逻辑 values.sort((a, b) => { // 这里的索引要对应你的实际列:比如status在B列就用[1],priority在C列就用[2] const statusA = statusWeight[a[1]] || 99; // 未知status自动排最后 const statusB = statusWeight[b[1]] || 99; if (statusA !== statusB) { return statusA - statusB; // 权重小的排前面 } else { // 同status下比较priority const priorityA = priorityWeight[a[2]] || 99; const priorityB = priorityWeight[b[2]] || 99; return priorityA - priorityB; } }); // 把表头加回去(没有表头的话删掉这行) values.unshift(header); // 将排序后的数据写回表格 range.setValues(values); }
注意事项
- 调整列索引:代码里的
a[1]和a[2]要对应你表格中status和priority的列位置(列索引从0开始,A列=0,B列=1,以此类推) - 表头处理:如果你的表格没有表头,删掉
const header = values.shift();和values.unshift(header);这两行 - 未知值处理:如果出现不在定义里的
status或priority,会被赋予权重99,自动排到所有任务的最后
使用方法
- 打开你的Google Sheets,点击「扩展程序」→「Apps脚本」
- 替换掉原来的单列排序脚本,粘贴上面的代码
- 调整好列索引后,保存脚本,点击运行测试
- 也可以设置时间触发器,让表格自动定期排序
内容的提问来源于stack exchange,提问作者Paul Aspinall
相关产品推荐
相关产品推荐

