我在使用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
});
是否我从最后一行转到第一行而不是标题,它仍然只允许我删除一行并在下一行停止,因此,如果我从头到尾或从头到尾遍历工作表,它只会不要让我只删除一行并停止。
进行第二次删除之前,我需要sleep
或flush
吗?
以上代码的第二个示例,我什至尝试使用ws.deleteRows(i+1,1);
,并且发生相同的问题。
i--; // Must auto decrement i
]内部>
sheetDataAsArr.forEach(function(row,i) { }
以上,因为
Array.prototype.forEach()
在每次迭代中都增加i
。如果要进行反向迭代,请使用for