首页 > 解决方案 > 如果日期早于今天 - 15 天,如何删除行

问题描述

我想删除符合我的条件的工作表的所有行,即:

我试过这段代码,但公式不起作用:

function deleterows() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var lastrowtraining = ss.getSheetByName("Training").getRange("D:D").getValues().filter(String).length
var training = ss.getSheetByName("Training").getRange(1,1,lastrowtraining+4,42).getValues()  


//Here I define TODAY - 15  
var today = new Date(new Date().setHours(23,59,59,0,0))
var todayminus15 = new Date(today.setDate(today.getDate()-15))

// Here I define the columns
for(i=0;j<lastrowtraining+3;i++){
  var rowtraining = i+1;
  var date = training[i][0]
  var city = training[i][1]
  var trainingcomplete = training[i][5]

  if(trainingcomplete =='YES' && date <= todayminus15) {training.deleteRow(rowtraining)}
}
} 

但我得到这个错误:

TypeError: Cannot find function deleteRow in object "Date,City Code,Name,Email,Phone,Successfully completed training,Days since registration if not complete,Send reminder?,Acuity ID,Successfully doc
... (which is the content of the entire sheet)

标签: javascriptgoogle-apps-scriptdelete-row

解决方案


deleteRow方法适用于一张纸。不在工作表中的数据值数组上。

尝试:

var trainingSheet = ss.getSheetByName("Training"); // insert this line
var training = trainingSheet.getRange(1,1,lastrowtraining+4,42).getValues(); // change this line

然后使用:trainingSheet.deleteRow(rowtraining)

代替:training.deleteRow(rowtraining)


编辑

删除行时最好从底部向上。向下会导致这个问题:假设您必须删除第 5 行和第 6 行。

删除第 5 行后,所有较低的行都向上移动。因此,当您删除第 6 行时,这实际上是向上移动的原始第 7 行。

所以最好像这样反向运行循环:

for (var i = lastrowtraining + 2; i >= 0; i--){

推荐阅读