根据相邻行中存在的日期删除行

我在工作表的第五列中有日期。


function deleteOldData() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getSheetByName("Sheet1");

  var datarange = sheet.getDataRange();

  var lastrow = datarange.getLastRow();

  var values = datarange.getValues();


  var currentDate = new Date();

  var daysago = new Date().setDate(currentDate.getDate() - 5);

  daysago = new Date(Date.parse(daysago))

  Logger.log(daysago)



  for (i=lastrow;i>=2;i--) {

var tempdate = sheet.getRange(i, 5).getValue();

if(tempdate < daysago)  {

      sheet.deleteRows(2, i);

      break;

    }

  }

}

我正在使用此代码删除从今天开始日期少于 5 天的行。它应该只删除那些从今天开始日期少于 5 天的行,但它正在删除所有行,除了我在代码中省略的标题。


我的工作表中的日期如下所示:


7/1/2020 18:28:05


繁花不似锦
浏览 104回答 1
1回答

茅侃侃

回答:您需要使用deleteRow()而不是deleteRows().更多信息:根据文档:deleteRows(rowPosition, howMany)删除从给定行位置开始的多行。var ss = SpreadsheetApp.getActiveSpreadsheet();var sheet = ss.getSheets()[0];// Rows start at "1" - this deletes the first two rowssheet.deleteRows(1, 2);因此,当您打电话时,sheet.deleteRows(2, i);您将删除多行,从第 2 行开始,然后再完成i行 - 这可能高达lastrow.代码修改:您也不需要使用break关键字 - 一旦第一次满足条件,这将停止整个循环if,而不是继续删除日期超过五天的所有行。我还清理了一些功能:由于您已经从工作表中获取数据并将其存储在 中values,因此您无需再次获取数据tempdate- 您可以直接从values数组中分配它。为了使日期比较更精确,可以从日期对象中提取确切的时间戳,而不是使用诸如此类的东西getDate() - 5:function deleteOldData() {&nbsp; var ss = SpreadsheetApp.getActiveSpreadsheet();&nbsp; var sheet = ss.getSheetByName("Sheet1");&nbsp; var datarange = sheet.getDataRange();&nbsp; var lastrow = datarange.getLastRow();&nbsp; var values = datarange.getValues();&nbsp;&nbsp;&nbsp; var currentDate = new Date().getTime();&nbsp; var daysago = (new Date().getTime() - 432000000);&nbsp; &nbsp;&nbsp;&nbsp; for (var i = lastrow; i > 1; i--) {&nbsp; &nbsp; var tempdate = values[i - 1][4];&nbsp;&nbsp; &nbsp; if((new Date(tempdate).getTime()) < daysago)&nbsp; {&nbsp; &nbsp; &nbsp; sheet.deleteRow(i);&nbsp; &nbsp; }&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript