如何加快Google App脚本中的行删除功能

时间:2019-02-15 22:37:20

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

我试图遍历几百行数据,并删除C和D都为0的行。删除与该情况相匹配的行似乎是可行的,但确实需要花费一些时间。我是脚本编写的新手(我不是程序员,只是想学习),我想不出如何使其更快。主脚本来自其他人,我添加了逻辑以执行两列,而不仅仅是一列。有任何想法吗?

function deleteZeroes() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Email_Help_Total_Input');
  var range1 = s.getRange('C:C');
  var cValues = range1.getValues();
  var range2 = s.getRange('D:D');
  var dValues = range2.getValues();  

  for(var i=cValues.length-1;i>=0;i--)
    if(cValues[0,i]==0 && dValues[0,i]== 0) 
      s.deleteRow(i+1);

}

它有效,但是很慢。只是想使其更快一点。谢谢!

1 个答案:

答案 0 :(得分:1)

数组而不是读写!

data = s.getDataRange().getValues();
result = [];

for (i=0;i<data.length;i++) {
   if (data[i][2]==0) continue; //checks C, if it finds it continues the loop
   if (data[i][3]==0) continue; //checks D, if it finds it continues the loop
   result.push(data[i]);//only those that fell through the 0 checks will be here
}
s.getDataRange().clear();
s.getRange(1,1,result.length,result[0].length).setValues(result);

因此,这将一次读取所有数据,检查所有数据,并将正确的行复制到新的结果数组,删除旧的数据,然后粘贴回正确的数据。根据大小,您可能会在30秒内看到此功能。