3

我正在尝试编写一个脚本,该脚本将自动删除日期超过 3 天(4 天后)的行

我发现了这个我希望能够适应的脚本:

function DeleteOldEntries() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //give your sheet name below instead of Sheet1
  var sheet = ss.getSheetByName("Foglio1");

  var datarange = sheet.getDataRange();
  var lastrow = datarange.getLastRow();


  var currentDate = new Date();
  var oneweekago = new Date();
  oneweekago.setDate(currentDate.getDate() - 7);

  for (i = lastrow; i >= 2; i--) {
    var tempdate = sheet.getRange(i, 1).getValue();

    if (tempdate < oneweekago) {
      sheet.deleteRow(i);
    }
  }
}

但是脚本本身似乎有一个错误,我需要在将其调整为 4 天而不是 7 天之前弄清楚(这部分很容易)

如果该信息有帮助,我的工作表有 3 列,C 列中有日期

4

2 回答 2

3

“C 列中的日期,如果该信息有帮助”

这的确是 !而不是像在这一行中那样尝试在 A 列中获取日期:

var tempdate = sheet.getRange(i, 1).getValue();

您应该像这样查看 C 列中的值:

var tempdate = sheet.getRange(i, 3).getValue();

但为了更有效率,你应该在数组级别进行这些比较,像下面这样尝试,它会运行得更快......

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

var currentDate = new Date();
var oneweekago = new Date();
oneweekago.setDate(currentDate.getDate() - 7);

for (i=lastrow;i>=2;i--) {
var tempdate = values[i-1][2];// arrays are 0 indexed so row1 = values[0] and col3 = [2]

if(tempdate < oneweekago)  
{
  sheet.deleteRow(i);
}
}
}
于 2013-03-29T21:04:46.890 回答
1

如果您的行按日期顺序排列,最新的在顶部,并且您一次删除所有行而不是一次删除一个行,那将会快得多。

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

  var currentDate = new Date();
  var daysago = new Date().setDate(currentDate.getDate() - 3);
  var yearago = new Date().setDate(currentDate.getDate() - 365);


  for (i=lastrow;i>=2;i--) {
    var tempdate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
    if(tempdate < daysago)  {
      if(tempdate < yearago)  {continue;}
      sheet.deleteRows(1, i);
      break;
    }
  }
}
于 2018-05-20T03:26:20.023 回答