Google sheets - clear all rows with a date cell having a date older than one week

蹲街弑〆低调 提交于 2021-01-28 06:20:33

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!