利用google測驗收回來的學生資料兩百筆, 而且因為進行測驗時, 學生送出成績是隨機的, 要怎麼對應到我從校務系統下載的班級名單呢


底下為將工作表-名單中的學號與工作表-成績評量中的學號進行比對
只要找到成績中有答題者, 就把分數寫回名單中
這是個簡單但是很沒效率的方法, 如果兩個工作表各有100筆, 表示要比對100x100=10000次
所以如果跑太久跑不完, 必須成班級
畢竟google apps script 是有名的慢
本次學生數191人, 一次跑完約2分鐘
function main() {
let spreadSheet = SpreadsheetApp.getActive();
let nameSheet = spreadSheet.getSheetByName("名單");
let examSheet = spreadSheet.getSheetByName("評量");
let lastRow = nameSheet.getLastRow();
let students = [];
//收集學生名單
for (let i = 2; i < lastRow + 1; i++) {
let seat = nameSheet.getRange(i, 3, 1, 1).getValue().toString();
if (seat.length == 1) {
seat = '0' + seat;
}
let id = nameSheet.getRange(i, 1, 1, 1).getValue().toString() + nameSheet.getRange(i, 2, 1, 1).getValue().toString() + seat;
let student = {};
student.id = id;
nameSheet.getRange(i, 5, 1, 1).setValue(id);
students.push(student);
}
//取得學生分數
lastRow = examSheet.getLastRow();
for (let i = 2; i < lastRow + 1; i++) {
id = examSheet.getRange(i, 2, 1, 1).getValue().toString();
students.forEach(student => {
if (student.id == id) {
scores = examSheet.getRange(i, 1, 1, 1).getValue();
student.scores = scores;
}
})
}
//寫入學生分數
lastRow = nameSheet.getLastRow();
for (let i = 2; i < lastRow + 1; i++) {
id = nameSheet.getRange(i, 5, 1, 1).getValue().toString();
students.forEach(student => {
if(student.id == id){
nameSheet.getRange(i, 6, 1, 1).setValue(student.scores);
}
})
}
}
