如何通过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
相关产品推荐
相关产品推荐

