Google Form เป็นเครื่องมือสร้างแบบสำรวจยอดฮิต สร้างง่าย ใช้ง่าย เหมาะสำหรับงานที่เปิดให้ใครก็ได้ สามารถตอบแบบสอบถาม
แต่ ถ้าต้องการให้เฉพาะคนในองค์กรซึ่งใช้ G Suite (เช่น กรณีของ มหาวิทยาลัยสงขลานครินทร์ ใช้ G Suite for Education โดเมน psu.ac.th เป็นต้น) ตอบแบบสอบถามเท่านั้น ก็พอจะทำได้ แต่ก็จะเจอปัญหาคือ ผู้ใช้ในองค์กรอาจจะ Login ด้วย Web Browser ซึ่ง Sign-In ด้วย Gmail ส่วนตัว ก็จะยุ่งยากหน่อย ต้องสลับ Account เป็นต้น แล้วยิ่งบางคน ใช้ LINE เพื่อ Scan QR Code แล้วก็ไปใช้ In-App Browser ซึ่งก็ไม่รู้ว่า Sign-In ด้วย Account ไหน ยิ่งไปกว่านั้น ถ้าเป็นการไปใช้งานนอกสถานที่ที่ใช้ประจำ Google ก็มักจะ Challenge โดยการ ให้ระบุ เบอร์โทรศัพท์มือถือ หรือ Email ที่ใช้ Recovery สร้างความวุ่นวายได้เป็นอย่างมาก
แล้ว ก็มี Requirement “ง่าย ๆ” มาให้คิด
- ต้องการออกแบบระบบ ลงคะแนน ให้คณะกรรมการ ซึ่งอยู่ทั้งในและนอกองค์กร
- ท่าน ๆ เหล่านี้ ล้วน … ทรงคุณวุฒิ และ วัยวุฒิ
- ใช้อุปกรณ์หลากหลาย
- ส่งแบบฟอร์มไปให้กรอก โดยผ่าน Email ท่าน ๆ ซึ่งเป็น @yahoo.com, @hotmail.com, @gmail.com, @xxx.edu, @xxxxxxxxx
- บางท่าน ไม่มี Email แต่มี LINE เท่านั้น
- การลงคะแนน ต้องมั่นใจว่า กรรมการแต่ละท่าน เป็นผู้ลงคะแนนจริง ๆ
- ท่าน ๆ ลงคะแนนได้ 1 เสียงเท่านั้น
- เปลี่ยนใจได้ด้วย คือ ตอนแรกจะลงคะแนนอย่างนึง แล้วก็ Submit ไปแล้ว แต่ก็คิดว่า เอ๊ะ เปลี่ยนใจแระ (ในกรอบเวลา)
- ไม่สามารถทราบได้ว่าใครเป็นผู้ลงคะแนนได้ (โดยง่าย)
แนวทางการแก้ปัญหา
Google Form มี Feature นึง ที่บางคนไม่เคยใช้ นั่นคือ “Get pre-filled link”
Pre-filled Link กล่าวคือ ทำการกรอกข้อมูลบางอย่างใน Google Form แล้วส่งให้ผู้ใช้ เช่น เรารู้อยู่แล้วว่า จะส่งแบบฟอร์มนี้ ไปทาง Email ของกรรมการท่านนี้ ก็แทนที่ต้องให้ท่าน กรอกชื่อตัวเอง เราก็กรอกไปให้ท่านเลย อะไรทำนองนั้น
Idea ของเราคือ จะสร้าง “Question” ชื่อ Token ขึ้นมา (จะตั้งว่าอะไรก็ได้นะ)
แล้วคลิกที่ “Get Pre-filled Link”
จะได้แบบฟอร์มพร้อมกรอกอย่างนี้ เราก็จะ Mark ตำแหน่งที่จะแทนค่า Token ด้วยการใส่คำอะไรก็ได้ แต่ในที่นี้ จะใส่เป็นคำว่า “token” ตัวพิมพ์เล็ก ไปใส่ แล้วคลิกปุ่ม Get Link จากนั้น คลิกปุ่ม COPY LINK
Link ที่ได้ จะเป็นแบบนี้
https://docs.google.com/forms/d/e/XXXXXXXXXX/viewform?usp=pp_url&entry.625502761=token
จากนั้นแค่ค่า ข้อความ “token” ด้วยค่า Hash เช่น เอาชื่อ นามสกุล และ email address ของแต่ละคนมาเข้ารหัส MD5 (จะกล่าวถึงวิธีการได้มาในตอนท้าย) เช่น ได้เป็น
b4771c1c4d65442b32d7029d13fb6e41
ก็จะได้ URL ที่จะส่งให้ท่านกรรมการ อย่างนี้
https://docs.google.com/forms/d/e/XXXXXXXXXX/viewform?usp=pp_url&entry.625502761=b4771c1c4d65442b32d7029d13fb6e41
เมื่อผู้รับคลิก Link ก็จะได้หน้าตาฟอร์มแบบนี้
คราวนี้ ในภาพใหญ่ ก็ต้องหาทางทำสร้าง Hash ของกรรมการแต่ละท่าน อันนี้เป็นตัวอย่าง
ต่อไปนี้เป็นวิธีการหาค่า Hash (เขียนด้วย Google App Script)
Source: https://www.answiz.com/questions/2594/hash-of-a-cell-text-in-google-spreadsheet
function MD5 (input) {
var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input);
var txtHash = '';
for (i = 0; i < rawHash.length; i++) {
var hashVal = rawHash[i];
if (hashVal < 0) {
hashVal += 256;
}
if (hashVal.toString(16).length == 1) {
txtHash += '0';
}
txtHash += hashVal.toString(16);
}
return txtHash;
}
จากนั้นก็เขียน Script ส่ง Email / LINE แจ้งข้อความที่ต้องการ พร้อม Link ที่กรอกข้อมูล Hash ของแต่ละท่าน
เป็นอันเรียบร้อย …
เหมือนเดิม เพิ่มเติมคือ ความซับซ้อน
คราวนี้ ท่าน ๆ ก็ลงคะแนนกันมา แต่ว่า
- ช่อง Token นั้น บน Google Form มันแก้ไขได้ ไม่มีทาง Lock ทำให้บางท่าน เอ่อ เผลอ แก้ไข/ลบ/ทดลอง
- บางท่าน ก็ ลงคะแนน Submit แล้ว อยากเปลี่ยนใจทำไงดี ?
ดังนั้น ต้องหาทางทำให้
- ถ้า Hash ไม่ตรงกับข้อมูลที่มี ไม่นับคะแนน
- ถ้า Hash ตรง แต่ซ้ำ ๆ มา ให้นับคะแนนจาก Record ล่าสุด
ก็มาร่าย Formula กันหน่อย
หน้าตา Google Sheets ซึ่งเป็นผลการลงคะแนนที่ได้จาก Google Form
ไปเขียนสูตรใน Column D โดย จะนำค่าจาก Column C ไปตรวจสอบกับ Hash ซึ่งขอยกตัวอย่างว่า อยู่ที่ Sheet2 ใน Column A โดยใช้สูตร
=IF(ISNA(VLOOKUP(C2,Sheet2!A:A,1,false)),"Not Match","Match")
จากภาพแสดงให้เห็นว่า แถว 5 นั้น ค่า Hash ไม่ตรง จึงขึ้นคำว่า “Not Match”
ต่อไป ก็ Filter เฉพาะที่ Match แล้ว Sort ตาม Timestamp
สูตรประมาณนี้
=sort(filter(A2:D6,D2:D6="Match"),3,True)
คราวนี้ เราจะรู้ต้องหาว่า อันไหนหล่ะ ที่เป็น Record ล่าสุดในแต่ละกลุ่ม
ใช้สูตรประมาณนี้
=if(C14=C15,"","1")
กล่าวคือ พอเรียงลำดับแล้ว ก็หาว่า บรรทัดไหน เป็นขอบของกลุ่ม ว่างั้น (อธิบายยากจัง) ก็แสดงค่า 1
สุดท้าย จะก็ได้ผลสรุป Record ที่ Hash ตรง และเป็นการ Submit ล่าสุดของแต่ละกลุ่ม
สูตรประมาณนี้
=filter(A14:E17,E14:E17="1")
ก็เอาไปทำ Chart สรุป ได้แล้ว
หวังว่าจะเป็นประโยชน์ครับ