在谷歌应用程序脚本中无限执行代码

时间:2016-04-27 08:55:14

标签: loops google-apps-script do-while

我有无限运行的代码。我一步一步地检查了错误是在它的最后一部分有一个循环。

我在细胞(f,3)中的值为400,在细胞(f,4)细胞(f-1,4)细胞(f-2,4)细胞中(f-3,4):200 ,50,20,100

单元格(f,12)应显示值270。

function myFunction() {

      var ss = SpreadsheetApp.getActiveSpreadsheet();      

      var sheet = ss.getSheetByName("Feuille 1");
      var active = sheet.getActiveCell();

      var f = active.getRowIndex();           
      var r = sheet.getRange(f,3).getValues();        
      var i = f          
      var cellule = sheet.getRange(i,4).getValues();      
      var C = 0

      do {            
        C = C + cellule;
        var destverif = sheet.getRange(f,12);      
        destverif.setValue(C);
        i = i-1;            
         }while (C + cellule <= r);      

 }

1 个答案:

答案 0 :(得分:0)

您正在使用getValues()而不是getValue()来返回数组。你的while条件本质上是检查while(NaN + [["200"]] <= [["400"]])哪个不会真正解决,好像它返回true并且你有一个基本上是while(true)的循环。

要更正此问题,请改用getValue()。这会立即纠正您的无限循环。

我通过gchat与你聊天,并确定你的逻辑对你预期的输出也是错误的。您正试图获取这样的一组数据:

enter image description here

200开始获取突出显示列的值,然后向上移动直至总数大于或等于400。达到此值后,请写入该行400 / AVERAGE(200,100,101)

的第12列

我更正了你的代码,这段代码可以解决问题:

function getValues(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Feuille 1");
  var active = sheet.getActiveCell();  

  var rowIndex = active.getRowIndex(); //Get the rowindex of the current active cell
  var maxValue = sheet.getRange(rowIndex,3).getValue(); //Your max value is the active cells value

  var currentValue = 0;
  var activeRowIndex = rowIndex
  var loopIndex = 0;
  do{

    var cellData = sheet.getRange(activeRowIndex, 4).getValue(); //Get the value of the cell next to the selectedCell
    if(cellData !== ''){ //If the cell is not blank continue
      currentValue += cellData; //Add up the total as we go
      activeRowIndex --; //Subtract the row index so we can keep movign up
      loopIndex++; //Iterate the loopIndex so we know how many numbers we have added up to calculate the average
    } else {      
      break; //If the cell is blank, break out of the loop
    }

  } while (currentValue <= maxValue);

  sheet.getRange(rowIndex, 12).setValue(maxValue/(currentValue/loopIndex)); //set the ranges value and do the math in line for the average.
}