Google表格 - 删除日期过期行的脚本

时间:2013-03-26 23:21:31

标签: date google-apps-script google-sheets delete-row

我试图让脚本自动删除日期超过3天(4天)的行

我发现这个脚本我希望能够适应...     函数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栏,如果该信息有用

2 个答案:

答案 0 :(得分:2)

“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);
}
}
}

答案 1 :(得分:0)

如果您的行按日期排序,最新位于顶部并且您一次删除所有行而不是一次删除所有行,则速度会快得多。

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;
    }
  }
}