我试图遍历几百行数据,并删除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);
}
它有效,但是很慢。只是想使其更快一点。谢谢!
答案 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秒内看到此功能。