如何修改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
相关产品推荐
相关产品推荐

