利用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); } }) } }