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

如何修改Google Sheet脚本实现打开时仅隐藏早于昨日的日期列

问题解答

原代码问题说明

  • 原逻辑是查找距离当前时间最近的日期列索引,直接从第2列开始隐藏对应数量的列,没有区分「日期早于昨日」的判断规则,同时没有处理日期对象的时分秒偏差问题(表格内的日期默认是当天0点,Date.now()返回当前精确时间,直接对比会导致日期判断偏差)
  • 原隐藏逻辑的参数计算错误,会误覆盖当日/昨日的日期列

修改后可直接使用的代码

function onOpen(e) {
  var sheet = e.source.getSheetByName('Name of sheet'); // 替换为你的工作表名,或用.getSheets()[0]取第一个表
  var width = sheet.getDataRange().getWidth();
  var dates = sheet.getRange(1, 1, 1, width).getValues()[0]; // 直接取首行所有日期值
  
  // 计算昨日0点、今日0点的时间戳,消除时分秒的对比误差
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  var yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
  var yesterdayTimestamp = yesterday.getTime();

  var hideEndCol = 0;
  // 遍历所有日期列,找到最后一个早于昨日的列的位置(列从1开始计数)
  for (var i = 0; i < dates.length; i++) {
    var colDate = new Date(dates[i]);
    colDate.setHours(0, 0, 0, 0);
    if (colDate.getTime() < yesterdayTimestamp) {
      hideEndCol = i + 1; // 数组索引从0开始,表格列从1开始,所以+1
    } else {
      // 日期列按顺序排列的场景下,遇到第一个符合保留条件的列后可直接跳出循环
      break;
    }
  }

  // 只有存在需要隐藏的列时才执行隐藏操作,从第2列开始隐藏(和原逻辑保持一致,保留第1列固定内容)
  if (hideEndCol >= 2) {
    sheet.hideColumns(2, hideEndCol - 1);
  }
}

核心修改点说明

  • 新增昨日、今日的0点时间戳计算,避免时分秒差异导致的日期判断错误
  • 替换原有「找最近日期」的逻辑,改为明确判断日期是否早于昨日,完全匹配需求的保留规则
  • 优化隐藏逻辑的参数计算,只会隐藏早于昨日的列,昨日、当日及之后的日期列都会保留
    如果不需要保留昨日、仅保留当日列,只需把判断条件里的yesterdayTimestamp替换为today.getTime()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:45:03