Как я могу ускорить мой для l oop, который удаляет строки, отвечающие определенным критериям? - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю с данными в таблицах Google, пытаюсь удалить строки на основе определенного условия столбца. У меня есть около 900 строк данных для чтения. Я установил для l oop значение, которое читается в столбце 11 для каждой строки, чтобы определить, содержит ли оно слово «Отклонено». Если это не так, я хочу удалить строку. Скрипт работает как есть, но, к сожалению, обработка занимает несколько минут. Я волнуюсь, когда я добавляю дополнительные строки кода, это в конечном итоге истечет в 6 минут. Любые предложения о том, как ускорить это?

function Script2(){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("To Review");
    var range = sheet.getActiveRange();

    // delete the first three rows that appear
    var start, end;
    start = 1;
    end = 3;
    sheet.deleteRows(start,end);
    sheet.setFrozenRows(1);

    // delete any rows that are not Rejected
    var lastRow = sheet.getLastRow();
    var counter = lastRow
    for(var i=0;i<lastRow-1;i++){
        var status = sheet.getRange(counter,11).getValue();
        if(status!='Rejected'){
            sheet.deleteRow(counter)
        }
        counter = counter-1
    }
}

1 Ответ

0 голосов
/ 04 апреля 2020
function Script3() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('To Review');
  var sr=4;
  var rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,sh.getLastColumn());
  var vs=rg.getValues();
  var kA=[];
  for(var i=0;i<vs.length;i++) {
    if(vs[i][10]=='Rejected') {
      kA.push(vs[i]);
    }
  }
  sh.clear({contentsOnly:true});
  sh.getRange(1,1,kA.length,kA[0].length).setValue(kA);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...