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

如何修改谷歌表格脚本,基于单元格日期+30天条件隐藏行?

修复后的谷歌表格脚本(隐藏到期早于今日+30天的节目行)

原代码存在字符串日期拼接错误、未定义变量、语法问题,且逻辑不符合「今日加30天」的需求,以下是修复优化后的代码:

function HideExpired() {
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName('PledgePrograms');
  const timezone = ss.getSpreadsheetTimeZone();
  
  // 计算今日起30天后的日期,标准化为年月日格式(消除时分秒干扰)
  const thirtyDaysFromNow = new Date();
  thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);
  const normalizedThirtyDays = new Date(Utilities.formatDate(thirtyDaysFromNow, timezone, 'yyyy-MM-dd'));

  // 先显示所有行,避免重复隐藏导致的行无法恢复问题
  sheet.showRows(1, sheet.getMaxRows());

  const data = sheet.getDataRange().getValues();
  data.forEach((row, index) => {
    // 跳过表头行(索引0对应表格第1行)
    if (index === 0) return;

    const programDate = row[10]; // K列,数组索引从0开始
    const status = row[11]; // Status列(L列)

    // 判断日期是否有效且早于30天后的日期
    const dateIsExpired = Object.prototype.toString.call(programDate) === '[object Date]' && 
                          programDate < normalizedThirtyDays;
    // 判断状态是否为Done/Rejected(不区分大小写)
    const statusIsCompleted = typeof status === 'string' && status.match(/^(Done|Rejected)$/i);

    // 满足任一条件则隐藏行(表格行号=数组索引+1)
    if (dateIsExpired || statusIsCompleted) {
      sheet.hideRows(index + 1);
    }
  });
}

关键修改说明

  • 日期逻辑修正:直接计算「今日+30天」的日期对象,标准化为纯年月日格式,避免时分秒干扰比较精度
  • 语法错误修复:移除原代码中无效的字符串拼接,修正行号计算逻辑
  • 变量补全:从表格Status列(L列)获取状态值,解决status未定义的报错
  • 体验优化:先显示所有行再执行隐藏,避免重复点击按钮导致的行无法正常显示问题
  • 表头保护:添加判断跳过第一行表头,防止误操作表头行

使用步骤

  1. 打开你的谷歌表格,点击「扩展程序」→「Apps 脚本」
  2. 替换原有的HideExpired函数代码为上述代码
  3. 保存并运行一次(首次运行需完成权限授权)
  4. 返回表格,点击绑定的按钮即可执行隐藏操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:54:52