如果日期早于今天 - 15 天,如何删除行
How to remove row if date is older than Today - 15 days
我想删除 sheet 中符合我的条件的所有行:
- F 列包含 "YES"
- A 列上的日期 <= 比今天 - 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)
deleteRow
方法适用于 sheet。不在 sheet.
的数据值数组上
尝试:
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--){
感谢@ADW、@Chris G 和@lazy.lizard。
主要问题是我在训练中触发了 deleteRow
动作 getValues
,deleteRow
需要 sheet。
所以这一半解决了问题:
var training = trainingsheet.getRange(1,1,lastrowtraining+4,42).getValues(); // change this line
但是,(我已经不知道为什么)此代码仅适用于符合条件的第一行,因此我在删除行后向 deleterowsnew()
函数添加触发器:
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
所以最后的代码是这样的:
function deleterowsnew() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var lastrowtraining = ss.getSheetByName("Training").getRange("D:D").getValues().filter(String).length
var trainingsheet = ss.getSheetByName("Training")
var training = trainingsheet.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;i<lastrowtraining+3;i++){
var rowtraining = i+1;
var date = training[i][0]
var city = training[i][1]
var trainingcomplete = training[i][5]
//I define here the condition and after it's completed and trigger the action again to be completed if another row matches the criteria
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
}
}
感谢大家的帮助,希望这对你的未来有所帮助!
我想删除 sheet 中符合我的条件的所有行:
- F 列包含 "YES"
- A 列上的日期 <= 比今天 - 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)
deleteRow
方法适用于 sheet。不在 sheet.
尝试:
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--){
感谢@ADW、@Chris G 和@lazy.lizard。
主要问题是我在训练中触发了 deleteRow
动作 getValues
,deleteRow
需要 sheet。
所以这一半解决了问题:
var training = trainingsheet.getRange(1,1,lastrowtraining+4,42).getValues(); // change this line
但是,(我已经不知道为什么)此代码仅适用于符合条件的第一行,因此我在删除行后向 deleterowsnew()
函数添加触发器:
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
所以最后的代码是这样的:
function deleterowsnew() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var lastrowtraining = ss.getSheetByName("Training").getRange("D:D").getValues().filter(String).length
var trainingsheet = ss.getSheetByName("Training")
var training = trainingsheet.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;i<lastrowtraining+3;i++){
var rowtraining = i+1;
var date = training[i][0]
var city = training[i][1]
var trainingcomplete = training[i][5]
//I define here the condition and after it's completed and trigger the action again to be completed if another row matches the criteria
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
}
}
感谢大家的帮助,希望这对你的未来有所帮助!