[试图删除多于一行的奇怪行为

问题描述 投票:0回答:2

我在使用Google Apps脚本和deleteRow()deleteRows()方法的两个功能时遇到麻烦。

下面的代码使用字符串匹配测试列中是否存在字符串。如果该字符串存在,那么我想做些事情,在这种情况下,请删除活动工作表中的几行。

问题是它删除了第一行或一行,然后似乎没有删除下面我的代码中的下一行。

即使我从工作表的末尾开始到最后一行到第一行,还是从第一行到最后一行像下面一样,都存在相同的问题。

它删除一行,但从不删除多于一行。在我的情况下,不会产生任何错误,只是使用任何一种方法都不会删除行。

    var data = ws.getRange("A2:U" + ws.getLastRow()).getValues();  

    var i = 0;
    var W = 23;
    var deleted = "DELETED"; 

    var sheetDataAsArr = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); // 2020Members 

    sheetDataAsArr.forEach(function(row,i)     {   

    // The i is a index 
       if ( row[W] = 'DELETED' ) {
          // DO SOMETHING HERE
            Logger.log('EMAIL DELETED ROW row is :' + row[B]);  // The email 
            ws.deleteRow(i+1);  // It deleted the record
            i--; // Decrement i because record was deleted 
       }
     i++; 
    });

问题非常奇怪,我已经能够使用这两个功能进行复制。它不会删除下一行,但是我会看到下一行,因为我显示了正确的电子邮件地址,但是第二次没有通过循环删除,但是也不会产生任何错误消息,只是不删除第二行一个,但是删除第一行就可以了。

它只允许我删除一行,不能再删除一行

   var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2020Members");

   var i = 0;   // 
   var U = 20;   // U defined here
   var B = 1;    // B defined here
   var W = 23;   // W defined here

   var myLastRow = ws.getLastRow();   //Number of last row with content
   Logger.log('LAST ROW is :' + myLastRow); // Get the last row in sheet  

   var i = myLastRow;

    sheetDataAsArr.forEach(function(row,i)     {   
   // The i is a index 
   if (i == 1) {
       return false; // This should break out when i = 1 
   }

   if  ( row[U] === true ) { 
      if ( row[W] === 'DELETED' ) {    // this comprision is = not == ? ===  
         Logger.log('EMAIL DELETED ROW row is :' + row[B]);  // The email 
         ws.deleteRow(i+1);  // It deleted the record

        }    
      }  
      i--; // Must auto decrement i

    }); 

是否我从最后一行转到第一行而不是标题,它仍然只允许我删除一行并在下一行停止,因此,如果我从头到尾或从​​头到尾遍历工作表,它只会不要让我只删除一行并停止。

进行第二次删除之前,我需要sleepflush吗?

以上代码的第二个示例,我什至尝试使用ws.deleteRows(i+1,1);,并且发生相同的问题。

javascript arrays google-apps-script google-sheets
2个回答
0
投票
i--; // Must auto decrement i

]内部>

sheetDataAsArr.forEach(function(row,i)     {

}

以上,因为Array.prototype.forEach()在每次迭代中都增加i。如果要进行反向迭代,请使用for


0
投票
偏移问题
© www.soinside.com 2019 - 2024. All rights reserved.