Для цикла deleteRow (i) удаление неправильных строк - PullRequest
0 голосов
/ 08 мая 2018

Я использую Google Apps Script, чтобы написать скрипт для редактирования Google Sheets для списка рассылки. Мне бы хотелось, чтобы он прошел через все строки и удалил все строки с «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);
    }
  }
}

1 Ответ

0 голосов
/ 08 мая 2018

После удаления строки строки под ней меняют свою позицию. Один из способов избежать этой проблемы - сделать цикл в обратном порядке.

Другими словами, вместо

for(var i = 1; i < 30; i++)

Использование

for(var i = 29 ; i > 0; i--)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...