1 回答

TA貢獻1842條經(jīng)驗 獲得超21個贊
回答:
您需要使用deleteRow()
而不是deleteRows()
.
更多信息:
根據(jù)文檔:
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
關鍵字 - 一旦第一次滿足條件,這將停止整個循環(huán)if
,而不是繼續(xù)刪除日期超過五天的所有行。
我還清理了一些功能:
由于您已經(jīng)從工作表中獲取數(shù)據(jù)并將其存儲在 中
values
,因此您無需再次獲取數(shù)據(jù)tempdate
- 您可以直接從values
數(shù)組中分配它。為了使日期比較更精確,可以從日期對象中提取確切的時間戳,而不是使用諸如此類的東西
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);
}
}
}
添加回答
舉報