For Loop deleteRow(i)删除错误的行

时间:2018-05-08 17:35:21

标签: javascript google-apps-script google-sheets

我使用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);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

删除行后,它下方的行会改变它的位置。避免此问题的一种方法是以相反的顺序执行循环。

换句话说,而不是

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

使用

for(var i = 29 ; i > 0; i--)