Google Sheets自动排序问题:更新Dispensed Date后无法触发排序
解决Google Sheets按日期自动排序的问题
问题说明
我是新手,想让Google Sheets按日期自动排序。表格里G列用了WORKDAY公式,更新Dispensed Date后,Re-order Date(G列)会自动按工作日规则更新。需求是:更新Dispensed Date后,Re-order Date更新完成,整行自动按G列日期升序排序(最早日期在前)。
当前问题:设置的自动排序脚本只有手动修改G列时才触发排序;更新Dispensed Date导致G列自动更新时,不会触发排序,行位置保持不变。
当前使用的脚本
function autoSort(e) { const row = e.range.getRow() const column = e.range.getColumn() const ss = e.source const currentSheet = ss.getActiveSheet() const currentSheetName = currentSheet.getSheetName() if(!(currentSheetName === "ORDERPAD" && column === 7 && row >= 2)) return const range = currentSheet.getRange(2,1,currentSheet.getLastRow()-1,7) range.sort({column: 7, ascending: true}) } function onEdit(e){ autoSort(e) }
解决方法
问题出在脚本的触发条件:原脚本只监测**手动修改G列(第7列)**的操作,而更新Dispensed Date所在列时,onEdit事件的触发列是Dispensed Date对应的列,不符合column ===7的判断,因此不会执行排序。
调整思路:把Dispensed Date所在列也加入监测范围,确保修改该列时同样触发排序逻辑。假设Dispensed Date在E列(第5列),修改后的脚本如下:
function autoSort(e) { const row = e.range.getRow() const column = e.range.getColumn() const ss = e.source const currentSheet = ss.getActiveSheet() const currentSheetName = currentSheet.getSheetName() // 监测ORDERPAD工作表、行号≥2,且修改的是Dispensed Date列(第5列)或Re-order Date列(第7列) if(!(currentSheetName === "ORDERPAD" && row >=2 && (column ===5 || column ===7))) return const range = currentSheet.getRange(2,1,currentSheet.getLastRow()-1,7) range.sort({column:7, ascending:true}) } function onEdit(e){ autoSort(e) }
注意事项
- 如果Dispensed Date不在第5列,把代码里的
column ===5改成实际对应的列号(比如D列对应4,F列对应6) - 脚本保存后,直接修改Dispensed Date列内容,G列更新后整行会自动按G列升序排序
内容的提问来源于stack exchange,提问作者Sharief
相关产品推荐
相关产品推荐

