Google apps script 编写基于多个阈值的公式/脚本&;将其应用于多行
我正在尝试写一个公式或脚本,需要两个输入,一个学生的出勤率和GPA,并吐出他们的跟踪评分,如这里所述 我还使用了文档中建议的map方法,但是第一个元素未定义时出现了一个错误。我不熟悉map方法,所以我的问题可能就在那里Google apps script 编写基于多个阈值的公式/脚本&;将其应用于多行,google-apps-script,google-sheets,excel-formula,Google Apps Script,Google Sheets,Excel Formula,我正在尝试写一个公式或脚本,需要两个输入,一个学生的出勤率和GPA,并吐出他们的跟踪评分,如这里所述 我还使用了文档中建议的map方法,但是第一个元素未定义时出现了一个错误。我不熟悉map方法,所以我的问题可能就在那里 function ONTRACK2(input){ if (input.map) { // Test whether input is an array. return input.map(ONTRACK2); // Recurse over ar
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])
}
};
GPA也有类似的功能,我计算GPA时没有错误:
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]))
}
};
另一个基于脚本的想法是通过迭代构建某种数组对象,存储“正常”值,然后将它们写入正确的列
2。这是否可以在没有应用脚本的情况下完成,而改为在工作表中使用公式?
我在玩模糊查找
我做了一张参考表
这些是我尝试过的公式,其中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))))
=INDEX('Reference Table'!F2:F20,MATCH(2,INDEX(1/('Reference Table'!D2:D20=G2)*)('Reference Table'!E2:E20我不确定工作表公式,但您可以使用应用程序脚本执行此操作
转到,在菜单上单击“查找学生轨迹”和“计算轨迹”。列“p”将填充学生轨迹数据。瞧
这是我的职责
function FindMyTrack()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var student = ss.getSheetByName("StudentData");//select sheets
var refer = ss.getSheetByName("Reference Table");//select sheets
var stData = student.getRange(2, 7, student.getLastRow(), 2).getValues();// get sheet data
var refData = refer.getRange('D2:F20').getValues();// get sheet data
var tracks = [];
//checking each student attendance and GPA with reference data
for(var n in stData ){
for(var p in refData){
if( stData[n][0] >= refData[p][0] && stData[n][1] >= refData[p][1]){
tracks.push([refData[p][2]]);//save matched value in an array
break;
}
}
}
// setting saved track data in the "P" (16) column
student.getRange(2, 16, tracks.length, 1).setValues(tracks);
}
您可以检查工作表的关联代码(“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))))
function FindMyTrack()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var student = ss.getSheetByName("StudentData");//select sheets
var refer = ss.getSheetByName("Reference Table");//select sheets
var stData = student.getRange(2, 7, student.getLastRow(), 2).getValues();// get sheet data
var refData = refer.getRange('D2:F20').getValues();// get sheet data
var tracks = [];
//checking each student attendance and GPA with reference data
for(var n in stData ){
for(var p in refData){
if( stData[n][0] >= refData[p][0] && stData[n][1] >= refData[p][1]){
tracks.push([refData[p][2]]);//save matched value in an array
break;
}
}
}
// setting saved track data in the "P" (16) column
student.getRange(2, 16, tracks.length, 1).setValues(tracks);
}