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

しかし、スクリプト自体にエラーがあるようで、7 日間ではなく 4 日間に適応させる前に把握する必要があります (その部分は簡単です)。

その情報が役立つ場合、私のシートには列Cに日付を含む3つの列があります

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 に答える