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

如何通过Apps Script实现Google Sheets同日期数据按时间排序

Google Sheets 双列排序脚本修正方案

你现有代码的二级排序逻辑是为C列自定义状态排序写的,既不匹配I列时间排序的需求,两次独立调用sort()也会破坏一级日期的分组效果,直接使用下面修正后的代码即可实现「先按A列日期排序、同日期下按I列开始时间二次排序」的效果:

function autoSort() {
  var headerRows = 1;
  var sortFirst = 1; // 一级排序列:A列(日期)
  var sortFirstAsc = false; // 设为true=日期升序(早→晚),false=日期降序(晚→早)
  var sortSecond = 9; // 二级排序列:I列(开始时间)
  var sortSecondAsc = false; // 设为true=时间升序(早→晚),false=时间降序(晚→早)

  // 读取工作表数据
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var sheet = SpreadsheetApp.getActive().getSheetByName(activeSheet.getSheetName());
  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();
  // 无有效数据行时直接退出,避免运行报错
  if (lastRow <= headerRows) return;
  var range = sheet.getRange(headerRows + 1, 1, lastRow - headerRows, lastCol);
  var values = range.getValues();

  // 单次排序实现双优先级判断,避免多次排序打乱层级
  values.sort(function(a, b) {
    // 优先比对日期列
    const dateA = a[sortFirst - 1];
    const dateB = b[sortFirst - 1];
    if (dateA.getTime() !== dateB.getTime()) {
      const compareRes = dateA < dateB ? -1 : 1;
      return sortFirstAsc ? compareRes : -compareRes;
    }
    // 日期相同时比对开始时间列
    const timeA = a[sortSecond - 1];
    const timeB = b[sortSecond - 1];
    const compareRes = timeA < timeB ? -1 : timeA > timeB ? 1 : 0;
    return sortSecondAsc ? compareRes : -compareRes;
  });

  // 排序结果写回表格
  sheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}

使用注意事项

  • 排序方向可根据需求自行修改代码顶部的两个布尔值参数,默认是日期和时间都按从新到旧的降序排列。
  • 请确保A列日期、I列时间为表格可识别的日期/时间格式,不要存储为普通文本,否则会出现大小比对错误导致排序异常。
  • 脚本新增了空表判断,表格仅存在表头时不会执行写操作,避免触发运行错误。

参考示例截图

内容的提问来源于stack exchange,提问作者Md Foysal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:06:05