ทำระบบลงทะเบียนหนังสือด้วย Google Forms + Google Sheets + AwesomeTable

เทศกาลปีใหม่ เป็นโอกาสดีๆ ที่เราจะได้เริ่มต้นสิ่งใหม่ๆ ออฟฟิศของบริษัทแทนเจอรีน ก็มีการย้ายไปชั้นใหม่ ใหญ่กว่าเดิม พร้อมกับการขึ้นออฟฟิศใหม่ ที่ออฟฟิศก็มีการริเริ่มเล็กๆ แต่เป็นสิ่งใหม่ นั่นคือการทำระบบแบ่งหนังสือกันอ่าน โดยเปิดให้พนักงานเอาหนังสือของตัวเองที่อ่านแล้วชอบ อยากให้คนอื่นอ่านด้วย เอามาวางไว้ในตะกร้าที่เตรียมไว้

แค่เตรียมตะกร้าเปล่าหนึ่งใบ ก็พร้อมให้คนเอาหนังสือมาวางแล้ว

ใครอยากอ่านหนังสือเล่มไหน ก็เดินมาหยิบไปอ่านได้เลย (ตอนนี้เพิ่งเริ่มต้น เลยยังไม่มีระบบยืม/คืน แต่อาจจะขยายผลในอนาคตก็เป็นได้) โดยเราจะมี online catalog เพื่อบอกว่าตอนนี้เรามีหนังสืออะไรบ้าง และใครเป็นเจ้าของ ถ้าคนที่หยิบไปอ่านแล้วถูกใจ อยากขอบคุณเจ้าของ จะได้ตอบแทนน้ำใจกันได้ถูกคน

online catalog ให้ทุกคนเข้ามาดูได้ว่าตอนนี้มีเล่มไหนน่าสนใจบ้าง ผ่านทาง intranet

โครงการนี้ ตั้งใจออกแบบมาให้ทุกคนมีส่วนร่วมด้วยตัวเองได้ ไม่ต้องมีส่วนกลาง หรือเจ้าหน้าที่ห้องสมุดแต่อย่างใด บริการต่างๆ จึงออกแบบมาให้เป็น self-service ทั้งหมด โดยวันนี้เราจะมาพูดถึงระบบลงทะเบียนเจ้าของหนังสือกันครับ

ระบบลงทะเบียนเจ้าของหนังสือนั้น มีไว้ให้คนที่อยากเอาหนังสือมาวาง สามารถลงทะเบียนด้วยตัวเองได้เลย และเมื่อลงทะเบียนเรียบร้อยแล้ว ข้อมูลหนังสือจะไปแสดงผลอยู่ใน online catalog โดยอัตโนมัติ โดยไม่ต้องเขียน script แต่อย่างใด ใช้การผูกสูตร Google Sheet ง่ายๆ แค่นั้น

ภาพรวมของระบบลงทะเบียนเจ้าของหนังสือ มีดังนี้ครับ

ระบบลงทะเบียนเป็นแบบบริการตัวเอง ไม่ต้องใช้คนดูแล

ขั้นแรกคือการลงทะเบียน โดยใช้ Google Forms ในการกำหนดข้อมูลที่ต้องกรอกเข้ามา ความสะดวกคือเราสามารถตั้งค่าให้ Google Forms เก็บอีเมลของผู้ลงทะเบียนมาให้ได้เลย ไม่ต้องให้เขามากรอกเอง

แบบฟอร์มที่ใช้ในการลงทะเบียนหนังสือ

เมื่อมีการ submit Google Forms ข้อมูลจะไหลมาลงใน Google Sheets ที่ผูกไว้โดยระบบ แต่เนื่องจากการนำข้อมูลไปใช้งานต่อต้องมีการ process ข้อมูลนิดหน่อย เช่น การสลับ column และการแกะ username ออกจากอีเมล (ไม่เอา @domain.com จะได้สั้นๆ) เราจึงใส่สูตรลงไปในช่องที่ต้องการ เพื่อ process ข้อมูลให้พร้อมนำไปใช้งานต่อ

ดึงข้อมูลทั้ง column ด้วย ARRAYFORMULA

กรณีที่เราต้องการดึงข้อมูลทั้ง column เราสามารถใช่สูตร =Sheetname!cell ได้เลย แต่เราจะดึงค่ามาได้แค่ cell เดียว หากเราลองใส่ค่าเป็น range เช่น  =Sheetname!A2:A ซึ่งหมายถึง การอ้างอิง cell A2 จนดึง cell สุดท้ายใน column A ระบบจะแสดง error เนื่องจากข้อมูลต้นทางนั้น เป็น array (A2:A ใน sheet ต้นทาง) แต่ปลายทางเป็น cell แค่ช่องเดียว (cell ช่องที่เราใส่สูตร) ระบบจึงไม่สามารถยัดข้อมูลที่ขนาดไม่เท่ากันมาแสดงผลได้

ทางออกหนึ่งของปัญหานี้คือการใช้สูตร ARRAYFORMULA ที่ช่วยให้สามารถแสดงผลลัพธ์ที่เป็น array ลงใน cell หลายๆ ช่องได้ ด้วยการขยายผลลัพธ์ไปที่ cell ข้างเคียงให้พอดีกับ array ต้นทาง เท่านี้เราก็สามารถจัดลำดับ column ใหม่ได้ตามต้องการแล้ว โดยการใส่สูตร =ARRAYFORMULA('Sheetname'!A2:A)

ตัวอย่างการใช้สูตร ARRAYFORMULA (กรอบสีแดงในรูปภาพ)

สกัด username จากอีเมลด้วย REGEXEXTRACT

ข้อมูลอีกส่วนที่เราต้องการ process คือการสกัด username ออกมาจากอีเมล เนื่องจาก Google Forms จะเก็บข้อมูลมาเป็นอีเมล เช่น pakorn.n@tangerine.co.th แต่เราต้องการข้อมูลแค่ username ซึ่งก็คือ pakorn.n

สูตรที่ผมใช้คือ =REGEXEXTRACT(cell,"[A-z0-9._%+-]+") โดย cell คือ cell อ้างอิงที่มีข้อมูลต้นทาง และ [A-z0-9._%+-]+ คือ regular expression ที่ใช้ในการสกัด username ออกมาจากอีเมล

ตัวอย่างการใช้สูตร REGEXEXTRACT (กรอบสีแดงในรูปภาพ)

แสดง catalog ด้วย AWESOMETABLE

เมื่อเรา process ข้อมูลจนพร้อมใช้งานแล้ว ขั้นต่อไปคือการนำมาแสดงผล โดย AWESOMETABLE เป็นเครื่องมือหนึ่งในการนำข้อมูลจาก Google Sheets มาแสดงผลในรูปแบบเวบ ที่ interactive และมี template ให้เลือกใช้งานหลายรูปแบบ

template ที่เราเลือกมาใช้งานสำหรับงานนี้คือ online bookstore นำมาปรับแต่งเล็กน้อยให้เข้ากับการใช้งานของเรา ก็เรียบร้อยพร้อมนำมาใช้งานเป็น online catalog สำหรับโครงการนี้ทันที

ตัวอย่างที่เล่ามานี้เป็นเพียงหนึ่งในการประยุกต์ใช้งานนะคับ จริงๆ ทั้ง ARRAYFORMULA, REGEXEXTRACT, AWESOMETABLE และการใช้งาน Google Forms, Google Sheets ยังสามารถประยุกต์ใช้งานอื่นๆ ได้อีก แล้วแต่ความต้องการของแต่ละคน แต่ละองค์กรเลยครับ

ใครสนใจอยากนำ G Suite มาประยุกต์ใช้งาน หรือใช้งานอยู่แล้วและมีไอเดีย ต้องการคำปรึกษา สามารถติดต่อทีมงาน บริษัทแทนเจอรีน ได้เลยนะคับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเรียกใช้งาน Google Apps Script

ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

ออกแบบระบบให้คุยข้าม module กันได้ ด้วย Pub/Sub