Я пытаюсь написать формулу или скрипт, который будет принимать два входа, посещение ученика и GPA и выплевывать их рейтинг On-Track, как описано здесь ,Написание формулы/скрипта условно для нескольких пороговых значений и применения их во многих рядах
function ONTRACK(Att, GPA){
function getAttendanceRow(number){
if(number>=98){row="A";}
else if(number>=95){row="B";}
else if(number>=90){row="C";}
else if(number>=80){row="D";}
else {row="E";}
return row
}
function getGPACol(number){
if(number<1){col="F";}
else if(number<2){col="G";}
else if(number<3){col="H";}
else {col="I";}
return col
}
var matrix=getAttendanceRow(Att) + getGPACol(GPA)
var matrix_hash={'AI':5, 'BI':5,
'AH':4, 'CI':4,
'AG':3, 'BG':3, 'BH':3, 'CH':3, 'DI':3,
'BF':2, 'CF':2, 'CG':2, 'DG':2, 'DH':2,'EH':2,
'DF':1, 'EF':1, 'EG':1 }
return matrix_hash[matrix]
}
TWO ВОПРОСЫ
1. Как применить это через большое количество строк, не получив ошибку тайм-аута?
Я пытался использовать setFormula
function makeN(){
ss.getRange("N2").setFormula("=ONTRACK(G2*100,H2)");
ss.getRange("N2").copyTo(ss.getRange("N2:N"+lastRow));
}
Я также играл с методом карты, как предложил свою документацию, но получаю сообщение об ошибке о первом элементом является неопределенным. Я не знаком с методом карты, поэтому моя проблема может лежать там.
function ONTRACK2(input){
if (input.map) { // Test whether input is an array.
return input.map(ONTRACK2); // Recurse over array if so.
} else {
// do actual function work here
return ONTRACK(input[0][0]*100, input[0][1])
}
};
Нечто подобное для работы ГПД, где я вычислительное ГПД без ошибки:
function GPA2(input){
if (input.map) { // Test whether input is an array.
return input.map(GPA2); // Recurse over array if so.
} else {
// do actual function work here
return myAverage(getPoints(input[0][0]), getPoints(input[0][1]), getPoints(input[0][2]), getPoints(input[0][4]))
}
};
Другая идея сценария на основе было бы построить какой-то объект массива с помощью итерации, который хранит «On Track», а затем записывает их в правильный столбец.
2. Можете ли это сделать без AppScripts, как формула in-Sheets вместо этого?
Я играл вокруг с нечеткими поисками ссылочных here
Я сделал Справочную таблицу
Этих формулы, которые я пробовал, где столбцы G и H является моей посещаемостью и GPA соответственно.
=INDEX('Reference Table'!F2:F20,MATCH(2,INDEX(1/(('Reference Table'!D2:D20=G2)*('Reference Table'!E2:E20<=H2)),0)))
=ArrayFormula(INDEX('Reference Table'!$F$2:$F$20,MAX(ROW('Reference Table'!$D$2:$D$20)*(('Reference Table'!$D$2:$D$20)=G2)*(('Reference Table'!$E$2:$E$20)<=H16))))