删除 Google 工作表中超过 1 年的行(大型数据集)

Delete Rows older than 1 year in Google Sheets (Large Data Set)

我有一个相当大的数据集,包含大约 40,000 行(每天添加新行)。我想 运行 一个每天删除超过 1 年的行的脚本。

我一直在使用这个工作正常的,但是随着我的数据集变大它超时并且无法 运行。

这是我一直在使用的:

    function deleteFIVEoh() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("theFIVEoh");
    var datarange = sheet.getDataRange();
    var lastrow = datarange.getLastRow();
    var values = datarange.getValues();// get all data in a 2D array

    var currentDate = new Date();//today
    var yearOld = Date.now() + -365*24*3600*1000; 
    for (i=lastrow;i>=3;i--) {
    var tempDate = values[i-1][4];// arrays are 0 indexed so row1 = values[0] and col12 =. 
    [11]
    if ((tempDate!="") && (tempDate <= (yearOld)))
    {
    sheet.deleteRow(i);
    }
    }
    }

我的 sheet 上的数据始终按升序排序(最旧的条目在顶部)。有什么办法可以让它更快地工作吗?也许只查看前 500 行?

提前致谢! -wes

由于您的 sheet 是按升序排序的,因此最好从顶部开始,计算满足您条件的行数,然后使用单个 deleteRows() 方法。

function deleteFIVEoh() {
    const MS_IN_ONE_YEAR = 365*24*3600*1000;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("theFIVEoh");
    var datarange = sheet.getDataRange();
    var values = datarange.getValues();// get all data in a 2D array
  
    var currentDate = new Date();//today
    var yearOld = new Date(currentDate.getTime() - MS_IN_ONE_YEAR);

    for (i = 0; values[i][4] < yearOld; i++) {}
    sheet.deleteRows(1,i);
}

单个调用比循环 API 调用快得多,并且此代码中的迭代次数较少,并且不需要遍历整个 sheet.

执行前的样本:

执行后的样本: