如果某列满足条件,我想运行delete row函数



我想删除多行数据的条件,如果行中的B列等于CID参数。但我运行后,删除的数据是错误的。有时,删除的数据位于for行循环中指定行的上方或下方一行下面是我的代码:

if (e.parameter.func == "DeleteRec") {
var rg=ss.getSheetByName("MAIN").getDataRange().getValues();   
var lr= ss.getSheetByName("MAIN").getLastRow();
for(var row=1;row<=lr;row++){
var cid=rg[row].toString().split(',');
if(cid[1]==e.parameter.CID){
ss.getSheetByName("MAIN").deleteRow(row-1);
var data=200;

}
}

return ContentService.createTextOutput(data).setMimeType(ContentService.MimeType.TEXT);
}

说明:

您需要从自下而上或向后删除行,因为在您删除一行之后,您更改了电子表格文件的结构,因此rg与工作表的新结构不匹配。

  • 请记住,JavaScript中的数组索引从0开始。当变量row1时,您要删除工作表中的row+1,因为row=1正在获取数组的第二个元素。

  • for循环中调用getSheetByName将增加脚本的性能成本。相反,应该在循环之前定义sheet变量,以便每次需要时都可以使用它。

  • 由于您正在使用getDataRange,rg的长度等于getLastRow返回的长度。因此不需要lr

  • 不知道为什么你迭代地为变量var data=200分配固定值,但我保留了这部分,因为它不是你问题的一部分。

解决方案:

将相关部分替换为以下代码:

const sheet = ss.getSheetByName("MAIN");
const rg = sheet.getDataRange().getValues();   
for (var row = rg.length - 1; row>0; row--) {
var cid=rg[row].toString().split(',');
if(cid[1]==e.parameter.CID){
sheet.deleteRow(row+1);
var data=200;       
}
}

最新更新