script googleFormQuiz&Certificate
วันที่โพสต์: May 07, 2020 4:27:46 PM
ติดตามครูนรินทร์ รับ script ใหม่ ๆ ก่อนใครที่ https://bit.ly/2VJtwy6
เกียรบัตรรูปแบบเอกลักษณ์ไทย ใสรูปได้
// คลุม ส่วนด้านล่างนี้ copy ไปวางใน Google Script และ โปรดให้ เครดิต อย่าลบทิ้งเลย
// โค้ดนี้ พัฒนาโดย ครูนรินทร์ อนงค์ชัย ครู โรงเรียนเทพอุดมวิทยา สพม. 33 อ.สังขะ จ.สุรินทร์
// ปรับปรุ่ง ครั้งที่ 1 เมื่อ 16/04/2563 ตามคำแนะนำคุณครู มนตรี อกอุ่น โรงเรียนมัธยมทับทิมสยาม 04 จ.สุรินทร์
// ปรับปรุ่ง ครั้งที่ 2 เมื่อ 16/04/2563 ตามคำแนะนำคุณครู สุธาสินี บูรณะศิริศิลป์ โรงเรียนอนุบาลวัดสระแก้ว
// ปรับปรุง ครั้งที่ 3 เมื่อ 18/04/2563 ชื่อไฟล์ เป็น ชื่อเดียวกับ ชื่อคนทำข้อสอบ
// ปรับปรุง ครั้งที่ 4 เมื่อ 20/04/2563 เปลี่ยนเลขอาราบิกเป็นตัวเลขไทย
// ปรับปรุง ครั้งที่ 5 เมื่อ 23/04/2563 เพิ่ม ชื่อไฟล์ เป็น ชื่อเดียวกับ ชื่อคนทำข้อสอบ ปรับความแม่นยำ
// ปรับปรุง ครั้งที่ 6 เมื่อ 23/04/2563 เพิ่ม ปรับความแม่นยำ และ รวดเร็ว โดย ครูยุทธนา แม่นผล สังขะ สุรินทร์
// 1. google slide template ID =====================
var TEMPLATE_ID = 'xxxxx' //เอามาจาก google slide ที่เราออกแบบเกียรติบัตรไว้
// 2. ระบุคะแนนผ่าน ==================================
var PASS_PERCENT = 70;
// 3. สร้าง email====================================
var EMAIL_SUBJECT = 'ขอแสดงความยินดี คุณผ่านการการอบรม'
// 4. เนื้อหาในอีเมล์
var EMAIL_BODY = 'ยินดีด้วย คุณสอบผ่านการอบรม ติดตามบทเรียน Online อื่นจาก สพป.เลย เขต 1 ได้ที่เว็บไซต์ http://covid19school.loei1.go.th'
//=======================นอกนั้นถ้าไม่ถนัด ไม่ต้องแก้ไข นะครับ==========================
function getGoogleFormQuizScore() {
var sum_score = 0;
var total_score = 0;
var emailTo = [];
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
//=========== รับค่า คำตอบ ชื่อของ ผู้ทำข้อสอบ ====================
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[formResponses.length-1];
}
var itemResponses = formResponse.getItemResponses();
var itemResponse = itemResponses[0];
var user_name = itemResponse.getResponse(); //ตำแหน่ง ที่ 1
//--------------------------------------------------------------------
var getItems = form.getItems();
var item_title = getItems[3];
var folder_ftitle = item_title.getTitle();
Logger.log(folder_ftitle);
var form_title = folder_ftitle +' (File responses)';
var image_folder = DriveApp.getFoldersByName(form_title)
while (image_folder.hasNext()) {
var folder = image_folder.next();
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
}
Logger.log('form title', form_title);
//-----------------------------------------------------------------------------------
//=============== รัน เลขที่เกียรติบัตร ให้มี เลข 0 นำหน้า ========================
var form_submit = formResponses.length + 1;
var str = "" + form_submit;
var pad = "000000"; //จำนวนหลักที่คาดว่ามีคนเข้าใช้งาน
var running_id = pad.substring(0, pad.length - str.length) + str + "/" + getThaiYear();
// =================== เอาข้อมูลทั้งหมด ไป แทนที่ข้อความ ใน google slide ==================
//======================== ดึงข้อมูลชื่อคนสอบ อีเมล์
var response = form.getResponses().reverse()[0];
var email_back_to = response.getRespondentEmail(); // เอาไปใส่ ใน code ส่งอีเมล์
Logger.log(email_back_to);
var items = form.getItems();
for (var i=0; i<items.length; i++) {
var question = items[i];
// =========== ดึงข้อมูลชื่อคนสอบ และ ดึงข้อมูลตำแหน่ง แก้ไข 20/04/2020
var name_question = items[0];
var position_question = items[1];
// ======== ดึงข้อมูล ชื่อโรงเรียน 24/04/2563
var school_question = items[2];
//-------------------------------------------------------------
var image_question = items[3];
// ===========
var qTitle = question.getTitle();
var qType = question.getType();
var responseForItem = response.getResponseForItem(question); // === แก้ไข 20/04/2020
// =========== ดึงข้อมูลชื่อคนสอบ 20/04/2020
var name_responseForItem = response.getResponseForItem(name_question);
var name_answer = name_responseForItem.getResponse();
// =========== ดึงข้อมูลตำแหน่ง แก้ไข 20/04/2020
var position_responseForItem = response.getResponseForItem(position_question);
var position_answer = position_responseForItem.getResponse() ;
// =========== ดึงข้อมูล โรงเรียน แก้ไข 24/04/2020
var school_responseForItem = response.getResponseForItem(school_question);
var school_answer = position_responseForItem.getResponse() ;
//-------------------------------------------------------------------
var image_responseForItem = response.getResponseForItem(image_question);
var image_id = position_responseForItem.getResponse() ;
//=========ขั้นตอนเก็บค่าคะแนน=========================================
var answer = responseForItem ? responseForItem.getResponse() : null;
var item = castQuizItem_(question, qType);
if (item && typeof item.getPoints === "function") {
var maxScore = item.getPoints();
var gradableResponseForItem = response.getGradableResponseForItem(question);
var score = gradableResponseForItem.getScore();
Logger.log(String(qType), qTitle, answer, maxScore, score );
sum_score = sum_score + score;
total_score = total_score + maxScore;
}
}
Logger.log('image_uploaded', image_id)
var sum_total = sum_score*100/total_score; //======= รวมคะแนน ====================
var percentage = sum_total.toFixed(2);
if(percentage == 100){
percentage = sum_total.toFixed(0); // ถ้าคะแนนเป็น 100 ไม่ต้อมี .00 ==================
}
if (percentage >= PASS_PERCENT && email_back_to == response.getRespondentEmail()){
// ========== copy Slide ====== เท็มเพลตเกียรติบัตรที่สร้างด้วย googl slide
var file = DriveApp.getFileById(TEMPLATE_ID).makeCopy()
var copyFile = file.makeCopy('เกียรติบัตรผ่านการอบรมของ '+user_name);
var copyId = copyFile.getId()
var copyDoc = SlidesApp.openById(copyId);
var slides = copyDoc.getSlides();
var templateSlide = slides[0];
var shapes = templateSlide.getShapes();
//--------------------------------------------------------------------------
Logger.log("สวัสดีครับ ",name_answer,"ตำแหน่ง",position_answer,"ที่อยู่อีเมล์", email_back_to);
Logger.log("ข้อสอบนี้มีคะแนน คะแนนเต็ม =",total_score,"คะแนนที่ได้ ",sum_score, "คิดเป็น ร้อยละ", percentage);
Logger.log("ผลการสอบ", "คุณผ่าน ขอแสดงความยินดีด้วยครับ");
//-------------------------------------------------------------------------------------
// var IMAGE_URL_1 = 'https://drive.google.com/uc?export=view&id='+ image_id;
var IMAGE_URL_1 = 'https://doc.google.com/uc?export=view&id='+ image_id;
templateSlide.insertImage(IMAGE_URL_1, 20, 380, 150, 225).sendToBack();
//--------------------------------
shapes.forEach(function (shape) {
shape.getText().replaceAllText("{{name}}", name_answer);
shape.getText().replaceAllText("{{position}}", position_answer);
shape.getText().replaceAllText('{{school}}', school_answer);
shape.getText().replaceAllText("{{email}}", email_back_to);
shape.getText().replaceAllText("{{score}}", thaiNumber(percentage));
shape.getText().replaceAllText("{{id}}", thaiNumber(running_id));
shape.getText().replaceAllText("{{date}}", getThaiDate());
shape.getText().replaceAllText('{{month}}',getThaiMonth());
shape.getText().replaceAllText('{{year}}', getThaiYear());
});
//รอให้ การทำงาน ข้อต้น เสร็จ/ตรวจสอบว่า ทำงานเสร็จแล้ว ให้ทำงาน ลำดับต่อไป =====================
copyDoc.saveAndClose();
// ========== สร้างไฟล์ pdf
var newFile = DriveApp.createFile(copyFile.getAs("application/pdf"));
//===============คำสั่ง ส่งอีเมล์ ==== ถ้าผ่านเก็บสำเนา ถ้าไม่ผ่าน ไม่เก็บสำเนา ยังไม่แก้ ===============
MailApp.sendEmail(email_back_to, EMAIL_SUBJECT, EMAIL_BODY, {attachments: [newFile],});
} else {
// ถ้าไม่ผ่าน ไม่ต้องสร้าง pdf ส่งอีเมล์ แจ้ง ว่าไม่ผ่าน
MailApp.sendEmail( email_back_to, "ผลการสอบของคุณ", "ขอแสดงความเสียใจ คุณสอบไม่ผ่าน");
}
// ================ ขั้นตอน พิจารณา ลบไฟล์สำเนามาทิ้ง ======================================
//ไฟล์ google slide สำเนาต้นฉบับ ถ้าไม่ต้องการ ลบไฟล ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป
file.setTrashed(true);
// ถ้าไม่ต้องการ ลบไฟล์ pdf ให้ ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป
newFile.setTrashed(true);
//ไฟล์ google slide สำเนาต้นฉบับที่ถูกแทนที่ ด้วยข้อความใหม่ ถ้าไม่ต้องการ ลบไฟล ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป
copyFile.setTrashed(true);
}
//================เปลี่ยนวันที่เป็นแบบไทย=======================================
function getThaiDate() {
var date = new Date();
var DATE = date.getDate();
return thaiNumber(DATE);
}
function getThaiMonth() {
var date = new Date();
var DATE = date.getDate();
var MONTH = ["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"];
var THAI_MONTH = MONTH[date.getMonth()];
return THAI_MONTH
}
//==============================เปลี่ยนปี ค.ศ.เป็น พ.ศ.==============
function getThaiYear() {
var date = new Date();
var YEAR = date.getFullYear();
var THAI_YEAR = YEAR + 543;
return thaiNumber(THAI_YEAR);
}
// ============ ฟั่งชั่นเปลี่ยน เลขอาราบิก เป็น เลขไทย =========================
function thaiNumber(num){
var array = {"1":"๑", "2":"๒", "3":"๓", "4" : "๔", "5" : "๕", "6" : "๖", "7" : "๗", "8" : "๘", "9" : "๙", "0" : "๐"};
var str = num.toString();
for (var val in array) {
str = str.split(val).join(array[val]);
}
return str;
}
// ==== ฟังก์ชั่น ตรวจสอบว่า ได้เฉพาะ ข้อสอบแบบ ตัวเลือก เท่านั้น ข้อสอบแบบอื่น จะไม่นำคะแนน มารวม ===================
function castQuizItem_(item, itemType) {
if (itemType === FormApp.ItemType.MULTIPLE_CHOICE) {
return item.asMultipleChoiceItem();
} if (itemType === FormApp.ItemType.TEXT) {
return item.asTextItem();
}
return null;
}