Медленное выполнение цикла в Apps Script - PullRequest
0 голосов
/ 24 октября 2018

В основном я ищу любые рекомендации, которые вы можете дать мне, чтобы заставить этот кусок кода выполняться быстрее.

Намерение этого кусказакодируйте его в основном, протестировав некоторые условия, получив оценку и вопросы, связанные с каждым выбранным профилем, и напечатайте эти оценки в «Листе результатов» и напечатайте вопросы в таблицах, которым присвоено имя профиля.

Путем некоторого быстрого и базового тестирования, которое я обнаружил, когда цикл начинает печатать либо результаты, либо вопросы, с которых начинается медленное выполнение.

Извините за беспорядок накод Я только начал программировать в Apps Script несколько недель назад.

РЕДАКТИРОВАТЬ

Чтобы быть более конкретным, я пытаюсь выяснитьесли есть какая-либо работа вокруг, чтобы напечатать вопросы на различных листах и ​​значениях профилей.Я взглянул на аналогичный вопрос, и он обращается к циклу, используя forin, я все еще пытаюсь выяснить, есть ли какой-то другой логический процесс, который я могу сделать, чтобы получить эти значения.

var iGrade1 = 0;
 var iGrade2 = 0.5;
 var iGrade3 = 1;
 var resultsSheet = SpreadsheetApp.getActive().getSheetByName('Results');

 var iStartingColumn = 5;
 var iCellD = 'D';
 var iCellE = 'E';
 var iTotCounter = 2;
 var amountProfiles = profileSheet.getRange
 (2, perfilSheet.getLastColumn()).getValue();

 var iTotPerf = 0;
 var iPT = 1;
 var aResizeP = 1;

  for( i = 2; i< questionsSheet.getLastRow()  ; i++ ){
    //Range 
    sBI = 'B' + i;
    sDI = 'D' + i;

   //Copies values like 1|2|3|4|, 3|4|,  2|3|, etc.
   profileCodes = questionsSheet.getRange(sDI).getValue();


    for(j = 0; j < amountProfiles; j++){
//There is a checkbox where user selects if he wants      that profile or not
    if(profileSheet.getRange(1,iStartingColumn).getValue()
    === 'Yes'){
    var sheetProfile =             SpreadsheetApp.getActive().getSheetByName
(profileSheet.getRange(3, iStartingColumn).getValue());

    var totProfile = profileSheet.getRange(perfilSheet.getLastRow(), iStartingColumn).getValue();
    //User can select in a checkbox between 'Bad' 'Regular' and 'Good'
     if( ( questionsSheet.getRange( sBI ).getValue() === '× Bad' )  ){     
       if(profileCodes.split("|").indexOf( String( perfilSheet.getRange(2, iStartingColumn).getValue() ) ) > -1 ){
         iTotPerf = iTotPerf + iGrade1; }
    }

     else if( ( questionsSheet.getRange( sBI ).getValue() === ' ± Regular' )  ){
      if(  profileCodes.split("|").indexOf( String( perfilSheet.getRange(2, iStartingColumn).getValue() ) ) > -1 ){
         iTotPerf = iTotPerf + iGrade2; }
    }

    else if( ( questionsSheet.getRange( sBI ).getValue() === '✓ Good' )  ){
       if(profileCodes.split("|").indexOf( String( perfilSheet.getRange(2, iStartingColumn).getValue() ) ) > -1 ){
         iTotPerf = iTotPerf + iGrade3; }
    }

    if ( profileCodes.split('|').indexOf(String
    (perfilSheet.getRange(2, iStartingColumn).getValue()))
    > -1){
    questionsSheet.getRange('A' + i + ':' + 'C' + i)
    .copyTo(sheetProfile.getRange('A' + iPT),SpreadsheetApp
    .CopyPasteType.PASTE_NORMAL,false);
    sheetProfile.autoResizeColumn(aResizeP);
    }

    if(iTotPerf != 0){
    resultadosSheet.getRange(iCellD + iTotCounter).setValue(resultadosSheet.getRange(iCellD + iTotCounter).getValue() + iTotPerf);
    resultsSheet.getRange(iCellE + iTotCounter).setValue( ( (resultsSheet.getRange(iCellD + iTotCounter).getValue() * 100)/ totPerfil )/ 100);
    }
    }

    iTotPerf = 0;
    iTotCounter++;
    iStartingColumn++;   
    }


    iPT += 1; 
    iTotCounter = 2;
    iStartingColumn = 5; 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...