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