如果单元格= 0,则一次删除多个行

时间:2019-12-17 10:41:33

标签: google-apps-script google-sheets

如果符合条件,则此代码可以一次删除1行,效果很好。如果符合条件,我如何才能立即删除10或20行?

如果符合条件,当我需要删除约50-100行时,速度非常慢。

inner join

我知道应用脚本可以做到这一点。我正在寻找一个知道要添加到此脚本中的内容来执行我所要求的操作的人。

预先感谢

1 个答案:

答案 0 :(得分:0)

连续删除组中的行

function runOne() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var values=sheet.getDataRange().getValues();  
  var A=[];//The array of rows to delete
  var d=0;
  var A=values.map(function(r,i){if(r[0]==true)return i+1;}).filter(function(e){return(e);});
  for(var i=0;i<A.length;) {
    var n=0;
    var idx=i;
    while((idx+1+n)<A.length && A[idx+1+n]-A[idx+n]==1){n++;}
    sheet.deleteRows(A[i]-d,n+1);
    d+=n+1;
    i+=n+1;
  }
}

这是我的工作表在删除开始前的样子。我在第一栏中有复选框作为删除行的原因,但是您可以使用任何条件

enter image description here

删除后的工作表结束:

enter image description here

我试了一下,发现速度要快一点。

//A is an Array of row numbers to delete
function dRows(A) {
  var d=0;
  var oA=[];
  for(var i=0;i<A.length;) {
    var n=0;
    while((i+1+n)<A.length && A[i+1+n]-A[i+n]==1){n++;}
    oA.push({row:A[i]-d,num:++n});
    d+=n;
    i+=n;
  }
  return oA;//deleteRows parameters array
}

function runTwo() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var values=sheet.getDataRange().getValues();  
  var A=values.map(function(r,i){if(r[0]==true)return i+1;}).filter(function(e){return(e);});
  dRows(A).forEach(function(r){sheet.deleteRows(r.row,r.num)});
}