1 回答
TA贡献1842条经验 获得超22个赞
回答:
您需要使用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);
}
}
}
添加回答
举报
