javascript - 如果日期早于今天 - 15 天,如何删除行
问题描述
我想删除符合我的条件的工作表的所有行,即:
- F列包含“是”
- A 列上的日期 <= 比 TODAY - 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
方法适用于一张纸。不在工作表中的数据值数组上。
尝试:
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--){
推荐阅读
- python - 如何从 MATLAB 在 Conda 环境中运行 Python 脚本?
- sqlite - SQLite 选择以比较同一行中的两个最后一个订单
- sql-server - 在 SSIS 中将 VARCHAR 转换为 DATE
- azure - Azure API 管理和 App Function 后端:找不到 ID 为“foo”的后端
- android - 如何使用android studio中的按钮创建一个应用程序来重启/重启android手机?
- javascript - 在 django 中一键发送两个表单,修复错误
- expss - 如何删除空行并添加描述性列?
- python - 编写一个文本文件,其中的行有两个单词,用逗号分隔,来自 while 循环
- php - 如果未设置参数,如何给出默认值
- mysql - ELK 数据摄取:elasticsearch 将文本视为布尔值,即使映射显示类型为“文本”