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

Google Script表格过滤脚本故障:列6与列15过滤功能失效

问题排查与修复方案

核心问题分析

列6(数值范围过滤)失效原因

原代码用setHiddenValues(['', '<2500', '>2599'])是完全错误的——setHiddenValues需要传入具体的数值/文本值数组,不能用范围表达式。另外,重复调用createFilter()会重置现有过滤器,干扰配置生效。

列15(日期范围过滤)失效原因

通过映射行号设置隐藏值的逻辑不符合setHiddenValues的使用规则,该方法不能接收行号作为参数。正确做法是利用过滤器的日期范围专用方法直接定义区间,同时要确保单元格日期被识别为原生Date对象,避免字符串格式导致的比较错误。


修复后的完整代码

function filtered() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('sheet1'); // 原代码写的是sheet2,已修正为你需要处理的sheet1
  
  // 确保过滤器存在,不存在则创建
  if (!sheet.getDataRange().getFilter()) {
    sheet.getDataRange().createFilter();
  }

  // 修复:过滤列6,仅显示2500-2599的数值
  var col6Criteria = SpreadsheetApp.newFilterCriteria()
    .whenNumberBetween(2500, 2599)
    .setHiddenValues(['']) // 隐藏空单元格
    .build();
  sheet.getFilter().setColumnFilterCriteria(6, col6Criteria);
  
  // 按列15日期从旧到新排序
  sheet.getRange(2, 15, sheet.getLastRow() - 1, 1).sort({ column: 15, ascending: true });

  // 修复:过滤列15,仅显示近3个月至未来3个月的日期
  var today = new Date();
  var threeMonthsAgo = new Date(today.getFullYear(), today.getMonth() - 3, today.getDate());
  var threeMonthsFromNow = new Date(today.getFullYear(), today.getMonth() + 3, today.getDate());
  
  var col15Criteria = SpreadsheetApp.newFilterCriteria()
    .whenDateBetween(threeMonthsAgo, threeMonthsFromNow)
    .build();
  sheet.getFilter().setColumnFilterCriteria(15, col15Criteria);

  // 过滤列5中包含"Minor W"的条目
  sheet.getFilter().setColumnFilterCriteria(5, SpreadsheetApp.newFilterCriteria().whenTextDoesNotContain('Minor W').build());
}

关键修复点说明

  • 列6修复:移除重复的createFilter()调用,改用whenNumberBetween精准定义数值范围,同时隐藏空值
  • 列15修复:替换错误的行号映射逻辑,用whenDateBetween直接设置日期区间,确保日期比较基于原生Date对象
  • 额外修正:原代码中工作表名称与你描述的处理目标不符,已调整为sheet1,可根据实际情况修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:08:26