我有无限运行的代码。我一步一步地检查了错误是在它的最后一部分有一个循环。
我在细胞(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);
}
答案 0 :(得分:0)
您正在使用getValues()
而不是getValue()
来返回数组。你的while条件本质上是检查while(NaN + [["200"]] <= [["400"]])
哪个不会真正解决,好像它返回true并且你有一个基本上是while(true)
的循环。
要更正此问题,请改用getValue()
。这会立即纠正您的无限循环。
我通过gchat与你聊天,并确定你的逻辑对你预期的输出也是错误的。您正试图获取这样的一组数据:
从200
开始获取突出显示列的值,然后向上移动直至总数大于或等于400
。达到此值后,请写入该行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.
}