Бесконечное выполнение кода в скрипте 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.
}