2015年1月3日 星期六

Google表單自動批改並自動寄信通知成績

  Google表單是免費、最容易讓使用者填入資料且不用額外學習操作系統,和資料收集者建構系統時參考資源最多的平台。本文開始介紹操作方法時,Google表單自動批改還有一套MCQ可以使用,不過依照Google常常更新API code狀況下,我沒有把握MCQ以往製作的問卷可以繼續套用,所以找到另一個直接使用Google Spreadsheet API的方法,至少在有問卷結果的狀況下,我還可以自動批改,不需要重新輸入問卷結果。以下開始操作步驟,

  1. 建立問卷
  2. 點選「查看即時表單」,請先填入第一筆資料並且作為正確答案比對之用
  3. 建立儲存回應的表單(小型資料庫)
  4. 接著在「回覆內容」的試算表Workbook(SpreadSheet)增加工作表sheet,原本的改為exam,新建的我命名為Grade
  5. 新工作表的A1-B1兩欄先略過不填寫,A1放系統抓取到的登入E-mail帳號,B1放使用者填寫的姓名。從C1往後新增題號跟總分欄位。(我們題目有10題)
  6. A1欄位填入=query(exam! B:B), B1欄位填入=query(exam! D:D),系統會從exam工作表自動抓取B和D欄位,來填入Grade工作表的A和B欄位。等下比對的欄位從C欄位到N欄位共10欄。
  7. C2欄位填入比對用程式碼 =ArrayFormula(if(ISBLANK(exam!C2)=false, if(exam!C2:C = exam!C$2, 10, 0), ) )     接著擴充到第10題,確認一下比對的是exam工作表的N欄位。
  8. 總分部分M2欄位貼上  =MMULT( INDIRECT("c2:L" & count(C:C)), TRANSPOSE( ARRAYFORMULA( COLUMN( INDIRECT("c2:L" & count(C:C)))^0)))   至此完成自動比對評分
  9. 接著開始使用『指令碼編輯器』觸發填表單後自動寄信,點選工具→指令碼編輯器
  10. 輸入程式碼,並授權Google以你的帳號寄信通知,
  11. 記得要填入觸發事件,資源→觸發程序
/**
* test AutoSendMail
*/
function SendRowsMail()
{
var rawFile = SpreadsheetApp.openById("Google SpreadSheet文件的ID");
var sheet = rawFile.getSheetByName("exam");
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var row = values[numRows-1];
//values[numRows-1][0] as TimeStamp
var mail = values[numRows-1][1]; //假設欄位1是使用者填的Mail
var name = values[numRows-1][3]; //欄位2是姓名
//For Score
var rawSheet = rawFile.getSheetByName("Grade");
var values1 = rawSheet.getDataRange().getValues();
var score = values1[numRows-1][12];

//傳送mail的方法,沒變
MailApp.sendEmail(mail, name+"同學資訊課期末測驗成績通知", name + "同學你好:\n你的資訊課期末測驗成績為" + score + "分。\n(此封信由系統發出,有任何問題請當面詢問老師。)");

}


參考文章:
阿剛老師的異想世界 http://kentxchang.blogspot.tw/2014/08/2014googlemcq.html (MCQ自動閱卷)
WFU Blog http://www.wfublog.com/2014/01/google-spreadsheet-form-auto-count.html(讓 Google 試算表製作的問卷試題能自動計分)
Allen's Blog http://blog.allenworkspace.net/2012/01/google.html  (Google表單自動寄信給填表人)
Allen's Blog回復文章 http://blog.allenworkspace.net/2012/01/google.html?showComment=1392797945619#c1498261627008507069  (新版Google SpreadSheet API語法修改)
Google論壇http://stackoverflow.com/questions/11727975/how-to-access-data-on-different-google-spreadsheet-through-google-apps-script  (openById使用時機)
Google論壇http://stackoverflow.com/questions/22852949/generic-error-on-spreadsheetapp-openbyidid-v2-spreadsheet  (openById 的ID位置)
Google論壇 https://productforums.google.com/forum/#!topic/docs/z0DwGafSe4M  (openById用法)

沒有留言:

張貼留言