Бесконечное выполнение кода в скрипте Google Apps

У меня есть этот код, который работает бесконечно. Я проверил шаг за шагом, и ошибка находится в последней части, где есть цикл.

Я имею в ячейке (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 ответ

Решение

Ты используешь getValues() вместо getValue() который возвращает массив. Ваше состояние пока по существу проверяется while(NaN + [["200"]] <= [["400"]]) который на самом деле не сработает, кажется, что он возвращал истину, и у вас был цикл, который был по существу while(true),

Чтобы исправить это, используйте getValue() вместо. Это сразу исправляет ваш бесконечный цикл.

Я поболтал с тобой по gchat и решил, что твоя логика также ошибочна для ожидаемого результата. Вы пытаетесь получить набор данных, как это:

Получить значение выделенного столбца, начиная с 200 и идти до тех пор, пока ваш итог не станет больше или равен 400, Как только оно достигнет этого значения, запишите в столбец 12 этой строки 400 / AVERAGE(200,100,101)

Я исправил ваш код, этот код делает свое дело:

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.
}
Другие вопросы по тегам