Как удалить только строчку содержащую дату?

Имеется код для Google Apps Scripts, который по идее должен был удалять определенную строчку при наступлении даты указанной в данной строчке Сам код:

function rzvzvx() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var date = Utilities.formatDate(new Date(), "GMT+5", "dd.MM.yyyy");
  var lastDate = Utilities.formatDate(sheet.getRange('D:D').getValue(), "GMT+5", "dd.MM.yyyy");

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (lastDate === date) {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }

};

Но столкнулся с двумя проблемами

Первая: Он не ищет дату по всему столбцу, а смотрит лишь на первую строку указанного столбца

Вторая: Если он находит соотвествие текущей даты и указанной в той строке, то вместо удаления только этой строчки, удаляет весь написанный текст на листе Google Sheelt

Можете подсказать с решением данной проблемы?


Ответы (1 шт):

Автор решения: Алексей Р
function getColLastRow(column){
  return column.getCell(column.getLastRow(),1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}

function DeleteExpiredDates() { // проходит по столбцу 'D' на активном листе и удаляет те строки, где дата меньше текущей 
  const target_column = 'D:D';
  const sheet = SpreadsheetApp.getActiveSheet();
  const col = sheet.getRange(target_column);
  const lr = getColLastRow(col);
  const lastDate = new Date().valueOf();

  var values = sheet.getRange(1,col.getColumn(),lr,col.getColumn()).getValues();

  for (var i = lr; i >= 1; i--) {
    var d = values[i-1];
    if (typeof d == 'object' & lastDate > new Date(d).valueOf()) {
      sheet.deleteRow(i);
    }
  }
};
→ Ссылка