Я использую скрипт Google Apps для написания сценария для редактирования Google Таблиц для списка рассылки. Я хотел бы, чтобы он пробегал все строки и удалял любые строки с помощью "BOUNCED" "ERROR" или "NO_RECIPIENT" в определенной ячейке.
Проблема, с которой я столкнулась, это For Loop
использует скобки [ ]
для обозначения строк и столбцов, которая индексирует первую строку в 0
. Действие deleteRows()
использует изогнутую скобку, которая индексирует первую строку в 1. По этой причине у меня возникли проблемы с удалением правильной строки.
Если я программирую deleteRow(i)
, он удаляет строку, следующую за той, которая проверяется For loop
. Если я программирую deleteRow(i+1)
, он сначала удаляет правильную строку, а затем удаляет следующую строку. Смотрите мой код ниже:
function cleanUp() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data = sheet.getDataRange().getValues();
for ( var i = 1; i < 30; i++) {
if (data[i][9] === 'ERROR' || data[i][9] === 'BOUNCED' || data[i][9] === 'NO_RECIPIENT') {
sheet.deleteRow(i+1);
}
}
}
После того, как строка удалена, строки ниже нее меняют ее положение. Один из способов избежать этой проблемы - сделать цикл в обратном порядке.
Другими словами, вместо
for(var i = 1; i < 30; i++)
использование
for(var i = 29 ; i > 0; i--)