Javascript 如果日期早于今天,如何删除行-15天
我想删除符合我的条件的工作表的所有行,即:Javascript 如果日期早于今天,如何删除行-15天,javascript,google-apps-script,delete-row,Javascript,Google Apps Script,Delete Row,我想删除符合我的条件的工作表的所有行,即: F列包含“是” 列A上的日期是,deleteRow方法在工作表上工作。不在工作表的数据值数组中 尝试: 然后使用:trainingSheet.deleteRow(rowtraining) 而不是:training.deleteRow(rowtraining) 编辑 删除行时,最好从底部向上移动。向下移动会导致这个问题:假设您必须删除第5行和第6行 删除第5行后,所有较低的行都已上移。因此,当您删除第6行时,这实际上是向上移动的原始第7行 因此,最好
- F列包含“是”
- 列A上的日期是,
方法在工作表上工作。不在工作表的数据值数组中 尝试: 然后使用:deleteRow
而不是:trainingSheet.deleteRow(rowtraining)
training.deleteRow(rowtraining)
编辑 删除行时,最好从底部向上移动。向下移动会导致这个问题:假设您必须删除第5行和第6行 删除第5行后,所有较低的行都已上移。因此,当您删除第6行时,这实际上是向上移动的原始第7行 因此,最好反向运行循环,如下所示:for (var i = lastrowtraining + 2; i >= 0; i--){
方法在工作表上工作。不在工作表的数据值数组中 尝试: 然后使用:deleteRow
而不是:trainingSheet.deleteRow(rowtraining)
training.deleteRow(rowtraining)
编辑 删除行时,最好从底部向上移动。向下移动会导致这个问题:假设您必须删除第5行和第6行 删除第5行后,所有较低的行都已上移。因此,当您删除第6行时,这实际上是向上移动的原始第7行 因此,最好反向运行循环,如下所示:for (var i = lastrowtraining + 2; i >= 0; i--){
谢谢@ADW、@chrisg和@lazy.lizard 主要问题是我在培训中触发了动作
,这是一个deleteRow
angetValues
需要一张工作表 所以这一半解决了问题:deleteRow
但是,(我已经不知道为什么)这段代码只适用于符合条件的第一行,因此我在删除该行后向var training = trainingsheet.getRange(1,1,lastrowtraining+4,42).getValues(); // change this line
函数添加了一个触发器:deleterowsnew()
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
if(trainingcomplete==“YES”和&date谢谢@ADW、@Chris G和@lazy.lizard 主要问题是我在培训中触发了动作
,这是一个deleteRow
angetValues
需要一张工作表 所以这一半解决了问题:deleteRow
但是,(我已经不知道为什么)这段代码只适用于符合条件的第一行,因此我在删除该行后向var training = trainingsheet.getRange(1,1,lastrowtraining+4,42).getValues(); // change this line
函数添加了一个触发器:deleterowsnew()
if(trainingcomplete =='YES' && date <= todayminus15) {trainingsheet.deleteRow(rowtraining);deleterowsnew()}
如果(trainingcomplete=='YES'&&date
返回一个包含值的二维数组,则不能对该数组调用getValues()
。但由于它是一个数组,因此可以对其调用数组函数,如deleteRow()
:看起来你指的地方不对。.filter()
是var training
的结果,我想你必须参考getRange()
@lazy.lizard我不这么认为,我需要指定工作表somehow@ChrisG那么我如何删除它?如果要更改工作表,需要调用ss.deleteRow()
在工作表本身上。deleteRow()
返回一个包含值的二维数组,您不能在该数组上调用getValues()
。但由于它是一个数组,您可以在其上调用数组函数,如deleteRow()
:看起来您引用了错误的位置。.filter()
是var training
,我想您必须参考getRange()的结果
@lazy.lizard我不这么认为,我需要指定工作表somehow@ChrisG那么我如何删除它?如果要更改工作表,需要调用ss.deleteRow()
在工作表本身上。感谢您的快速回复。@ADW我已经添加了此选项并修改了行,它可以工作……但只删除符合条件的第一行。您知道为什么吗?DiddeleteRow()
解决问题?我意识到可能还有另一个问题。所以编辑了上面的回答。感谢您的快速回复。@ADW我添加了这个并修改了行,它可以工作……但是只删除符合条件的第一行。您知道为什么吗?是否deleterowsnew()
解决问题?我意识到可能还有另一个问题。因此编辑了上面的回答。您应该将删除行新()
和todaymens15
转换为时间戳,使用date
为它们。请记住毫秒-它们可能不在date.parse()
日期中出现。您应该将
和今天的minus15
转换为时间戳,使用日期
为它们。请记住毫秒-它们可能不在日期.parse()
日期中出现。
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()} } }