在谷歌表我想过滤掉过去的日期与应用程序脚本,但没有过滤掉空白单元格



在Google Apps Script中,我想过滤掉所有在其中一列中过去日期的行。我设法做到了这一点,但是这个过滤器也过滤掉了日期列中有空白的行。我希望这些行能保留下来。所以我想:如果我创建一个没有行和日期的范围,然后过滤新的范围。这可能吗?还是我应该用另一种方法?

这是我的代码:

function hidePastDates() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getDataRange();
var today = new Date();
var weekPast = new Date(today.getTime() - 1000*60*60*24*7) 
var oldFilter = range.getFilter();
if (oldFilter !== null) {  
oldFilter.remove();
}
var filter = range.createFilter();  
var filterCriteria = SpreadsheetApp.newFilterCriteria();
filterCriteria.whenDateAfter(weekPast);
filter.setColumnFilterCriteria(2,filterCriteria);
}  

这是我在运行代码

之前的google表格这是我的google表格在我运行了代码之后所有的空白单元格都消失了但是我不希望这样

试试这样:

function reviewCurrentDatesOnly() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('sheet name');
const [hA, ...data]=sh.getDataRange().getValues();//assume a single header with  data below
let idx={};
hA.forEach((h,i)=>{idx[h]=i});//return index for a given column header striing
const today=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()).valueOf();//valueof today
const tommorow=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1).valueOf();value of tomorrow
data.forEach((r,i)=>{
let dt=r[idx['date-column header']];
let dtv=new Date(dt).valueOf();
//requires all data values to be between today and tomorrow
if(dtv>today && dtv<tommorow) {
//put your code here
}
});
}

无法按照您描述的方式进行过滤。即使在表格中手动应用过滤器,也会得到相同的结果。或者,您可以隐藏行:

function hidePastDates() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getDataRange();
var rangeValues = range.getValues();
var today = new Date();
var weekPast = new Date(today.getTime() - 1000*60*60*24*7) 
for (var i = 1; i < range.getHeight(); i++){
if (rangeValues[i][1] != ""){
if (rangeValues[i][1] < weekPast){
sheet.hideRows(i+1);
}
}
}
} 

最新更新