Как удалить только строчку содержащую дату?
Имеется код для 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);
}
}
};