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

如何修改hideRows函数仅清空两个月及更早日期行并保留上月数据?

解决方案:仅清空两个月及更早日期的行,保留上月数据

问题背景

原本的hideRows函数会清空上月的所有行数据,现在需要调整逻辑:只清空两个月及更早的日期行,保留上月的所有行。比如当前是2022年9月7日,要保留8月20日的行,清空7月9日、7月26日这类更早的行。

之前尝试修改dtv0为new Date(new Date().getFullYear(),new Date().getMonth() - 2,1).valueOf(),结果会清空除当月外的所有行,不符合需求。

原代码

function hideRows() {
 const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("IAD(Tampa)");
  const vs = sh.getDataRange().getValues();
  const dtv0 = new Date(new Date().getFullYear(),new Date().getMonth() - 1,1).valueOf();
  const dtv1 = new Date(new Date().getFullYear(),new Date().getMonth(),1,0).valueOf();
  let rows = [];
  vs.forEach((r,i) => {
    let d = new Date(r[0]);
    let dv = d.valueOf();
    if(dv >= dtv0 && dv < dtv1) {
      rows.push(i+1);
      sh.getRange(i + 1,1).setValue(null);
    }
  })
}   

修正后的代码

function hideRows() { 
  const ss = SpreadsheetApp.getActive(); 
  const sh = ss.getSheetByName("IAD(Tampa)"); 
  const vs = sh.getDataRange().getValues(); 
  // 计算基准时间:上月的当前日期(比如当前是9月7日,基准就是8月7日)
  const dtv0 = new Date(new Date().getFullYear(), new Date().getMonth() - 1, new Date().getDate()).valueOf(); 
  let rows = []; 
  vs.forEach((r,i) => { 
    let d = new Date(r[0]); 
    let dv = d.valueOf(); 
    // 仅清空基准时间之前的行(即两个月及更早的日期)
    if(dv < dtv0) { 
      rows.push(i+1); 
      sh.getRange(i + 1,1).setValue(null); 
    } 
  }) 
}

逻辑说明

  • 原代码的时间范围是上月整月(从1号到当月1号),所以会清空上月所有行。
  • 修正后的dtv0是上月的当前日期:比如当前是9月7日,dtv0就是8月7日的时间戳。
  • 判断条件改为dv < dtv0,即所有早于上月今天的日期都会被清空,而上月今天及之后的日期(比如8月20日)会被保留,同时当月的日期自然也不会被处理,完美符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:10:37