You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
}

注意事项

  1. 调整列索引:代码里的a[1]和a[2]要对应你表格中status和priority的列位置(列索引从0开始,A列=0,B列=1,以此类推)
  2. 表头处理:如果你的表格没有表头,删掉const header = values.shift();和values.unshift(header);这两行
  3. 未知值处理:如果出现不在定义里的status或priority,会被赋予权重99,自动排到所有任务的最后

使用方法

  • 打开你的Google Sheets,点击「扩展程序」→「Apps脚本」
  • 替换掉原来的单列排序脚本,粘贴上面的代码
  • 调整好列索引后,保存脚本,点击运行测试
  • 也可以设置时间触发器,让表格自动定期排序

内容的提问来源于stack exchange,提问作者Paul Aspinall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:46:12