Google Sheets onEdit脚本修改:将A列排序改为过滤隐藏已勾选行
解决方案
以下是调整后符合需求的完整脚本,已移除A列排序逻辑,新增A列已勾选行自动隐藏的过滤规则,同时保留原有的B列降序排序逻辑:
完整代码
function onEdit(event){ const ssApp = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ssApp.getSheetByName("Adispo"); const editedCell = sheet.getActiveCell(); const columnDate = 2; // B列日期列 const columnCheckbox = 1; // A列复选框列 const tableRange = "A5:G1000"; // 目标操作范围 const targetRange = sheet.getRange(tableRange); // 仅编辑A列或B列时触发后续逻辑 if(editedCell.getColumn() == columnDate || editedCell.getColumn() == columnCheckbox){ // 仅按B列(日期)降序排序,移除原A列排序规则 targetRange.sort( { column : 2, ascending: false } ); // 处理A列过滤规则 let existingFilter = sheet.getFilter(); // 清理范围不匹配的旧过滤器 if (existingFilter && existingFilter.getRange().getA1Notation() !== targetRange.getA1Notation()) { existingFilter.remove(); existingFilter = null; } // 无有效过滤器则新建 if (!existingFilter) { existingFilter = targetRange.createFilter(); } // 设置过滤规则:仅显示A列未勾选(值为FALSE)的行,已勾选行自动隐藏 const hideCheckedCriteria = SpreadsheetApp.newFilterCriteria() .whenEqualTo(false) .build(); existingFilter.setColumnFilterCriteria(columnCheckbox, hideCheckedCriteria); } }
逻辑说明
- 保留原有触发条件:仅编辑A列复选框或B列日期时才执行后续操作
- 排序逻辑调整:仅保留B列降序排序,移除原有的A列排序规则
- 过滤器逻辑:
- 自动识别当前表格是否存在匹配范围的过滤器,避免重复创建报错
- 过滤规则设置为仅显示A列值为FALSE的行,也就是已勾选(值为TRUE)的行会被自动隐藏
注意事项
- 首次使用前建议手动删除表格中已有的旧过滤器,避免范围冲突导致脚本运行异常
- 如果后续需要调整操作的表格范围,直接修改
tableRange变量的取值即可
内容的提问来源于stack exchange,提问作者Lionel
相关产品推荐
相关产品推荐

