问题
I'm trying to get a google sheet to hide or delete rows that have a date more than 1 week old in them.
This is what I've managed to piece together.
function ClearOld() {
var ssActive = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(getSheetByName('Done'))
var MyRange = ssActive.getRange("C:C");//selects C column
var WeekAgo = new Date(date.getTime()-7*(24*3600*1000));
for(i = 0; i < MyRange.length; i++) {
if(MyRange[i].getTime()<WeekAgo){
getActiveSheet().deleteRow(i);
}
}
}
回答1:
Here is some code that I think will do what you want:
function ClearOld() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Done');
SpreadsheetApp.setActiveSheet(sh);
var MyRange = sh.getRange(1,3,sh.getLastRow(),1);//selects C column
var dataInColumnC = MyRange.getValues();
//Logger.log('dataInColumnC: ' + dataInColumnC);
var todaysDate = new Date();
var todayAsMilliseconds = todaysDate.getTime();
Logger.log('todayAsMilliseconds: ' + todayAsMilliseconds);
var WeekAgo = todayAsMilliseconds - (7*(24*3600*1000));
Logger.log('WeekAgo: ' + WeekAgo);
var valueInCell,
dateInCell,
lengthOfData = dataInColumnC.length;
for (var i=lengthOfData; i > 0; i-=1) { //decrement count
if (dataInColumnC[i-1] === undefined) {continue};
valueInCell = dataInColumnC[i-1][0];
if (valueInCell === undefined || valueInCell === "") {continue};
Logger.log('valueInCell: ' + valueInCell);
Logger.log('typeof valueInCell: ' + typeof valueInCell);
dateInCell = valueInCell.getTime();
Logger.log('dateInCell: ' + dateInCell);
if(dateInCell < WeekAgo){
Logger.log('Row - ' + i + ' Is more than a week old');
sh.deleteRow(i);
};
};
};
I've tested it, and it works. I avoid using ssActive.getRange("C:C"); because it can get many blank rows of data. You must delete rows from the bottom up. If you delete rows from the top down, the data in the array, and the rows in the spreadsheet will be out of sync after the first row is deleted.
来源:https://stackoverflow.com/questions/35092901/google-sheets-clear-all-rows-with-a-date-cell-having-a-date-older-than-one-wee