Удалить строку в Google Таблицах, когда дата прошла

У меня есть электронная таблица, которую я хотел бы автоматически сортировать по дате, удалять повторяющиеся строки и удалять строки, если указанная дата прошла. У меня есть автосортировка и удаление дубликатов, мне просто нужна помощь с удалением строк на основе даты. Он удалит все строки, кроме строки № 2, независимо от даты.

Пока у меня есть:

function deleteRow1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows);

  var data = dataRange.getValues();

  for (i = 0; i < data.length; i++) {
    var row = data[i];
    var date = new Date();
    var sheetDate = new Date(row);
    var Sdate = Utilities.formatDate(date, 'EST-0500', 'MM:dd:yyyy')
    var SsheetDate = Utilities.formatDate(sheetDate, 'EST-0500', 'MM:dd:yyyy')
    if (Sdate > SsheetDate) {
      sheet.deleteRow(i + 2) 
    }
  }
}

person Queenie    schedule 15.08.2018    source источник
comment
Почему вы сравниваете даты как Strings, а не как Dates? Обратите внимание, что "a" < "b" и "10" < "2" оба являются true... Также обратите внимание, что ваш сценарий пропускает проверку строки для каждой удаляемой строки.   -  person tehhowch    schedule 15.08.2018
comment
Какие изменения вы бы порекомендовали? Мне кажется, я не совсем понимаю...   -  person Queenie    schedule 15.08.2018
comment
Я думаю, что @tehhowch стремится избавиться от строк var sdate и var sSheetDate, а затем сравнить if date›sDate (может быть, сначала немного подумав, что сегодня сейчас позже, чем сегодня в полночь). По крайней мере, я думаю, что вы хотите YYYY перед mmdd. Кроме того, кажется безопаснее перейти от конечного ряда к начальному, чтобы мир не сдвинулся под вами.   -  person Jeremy Kahan    schedule 15.08.2018


Ответы (1)


Так вот примерно как это могло бы выглядеть, я думаю. Я изменил твой распорядок так мало, как только мог, сосредоточившись на тех частях, которые казались беспокоящими.

В частности, даты сравниваются с датами, при этом время удаляется/приравнивается. Кроме того, меня беспокоило повторное построение сегодня, поэтому я исключил это из цикла.

Кроме того, я работал снизу вверх, чтобы убедиться, что удаления не влияют на то, какую строку рассматривать следующей.

    function deleteRow1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows);

  var data = dataRange.getValues();
  var today = new Date();
  today.setHours(0,0,0,0);
  for (i = data.length-1; i > -1; i--) {
    var row = data[i];
    var sheetDate = new Date(row);
    sheetDate.setHours(0,0,0,0);
    if (today > sheetDate) {
      sheet.deleteRow(i + 2) 
    }
  }


}

Было бы неплохо изменить i+2 на startRow+i.

person Jeremy Kahan    schedule 15.08.2018
comment
Добро пожаловать. Спасибо @tehhowch за дизайн. Пожалуйста, нажмите на галочку, чтобы принять ответ, если вы удовлетворены. - person Jeremy Kahan; 15.08.2018