Apps脚本中循环执行缓慢

时间:2018-10-24 20:58:48

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

基本上,我正在寻找可以为我提供使这些代码更快执行的任何建议。

这部分代码的目的基本上是通过测试某些条件来获得分数和与所选每个配置文件相关的问题,然后将这些分数打印在“结果表”中,并在分配有名称的表中打印问题。个人资料。

通过一些快速而基本的测试,我发现每当循环开始打印结果或问题时,就开始执行缓慢的结果。

很抱歉我刚开始在Apps中进行编程的代码混乱 几周前编写脚本。

编辑

具体来说,我试图找出是否有解决方法可以在不同的工作表和个人资料值中打印问题。我看了一个类似的问题,他使用for..in解决了一个循环,我仍在尝试找出我是否可以执行其他逻辑过程来获取这些值。

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; 
  }

0 个答案:

没有答案