使用GAS筛选最近两个周一之间日期的代码问题求助
修复GAS日期筛选代码的问题
你的代码存在几个关键问题,导致执行后表格变为空白:
问题点分析
- 公式参数顺序错误:ISBETWEEN要求起始日期小于结束日期,你颠倒了最近周一与上一个周一的顺序,导致筛选范围不存在
- 公式括号未闭合:末尾缺失一个右括号,造成公式语法无效
- 未处理无筛选场景:如果表格原本没有筛选,
getFilter()会返回null,直接调用setColumnFilterCriteria会触发报错
修复后的代码
function filt() { const sheet = SpreadsheetApp.getActiveSheet(); // 获取当前筛选,无筛选则创建新筛选 let filter = sheet.getFilter(); if (!filter) { filter = sheet.createFilter(); } // 计算两个周一的日期:上上个周一(起始)、上周周一(结束) const criteriaFormula = `=ISBETWEEN(F2, TODAY()-14-WEEKDAY(TODAY()-14,3), TODAY()-7-WEEKDAY(TODAY()-7,3))`; const criteria = SpreadsheetApp.newFilterCriteria() .whenFormulaSatisfied(criteriaFormula) .build(); // 应用筛选规则到第6列(F列) filter.setColumnFilterCriteria(6, criteria); }
关键说明
- 调整ISBETWEEN参数顺序:
TODAY()-14-WEEKDAY(TODAY()-14,3)计算上上个周一,TODAY()-7-WEEKDAY(TODAY()-7,3)计算上周周一,确保筛选范围有效 - 修正公式括号,保证语法正确
- 添加筛选存在性判断,避免无筛选时的报错
- 公式使用
F2而非F2:F,whenFormulaSatisfied会自动将规则应用到整列每一行
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

