19 ก.ย. 2023 เวลา 06:13 • ไอที & แก็ดเจ็ต

ตั้งเปิดปิด Form อัตโนมัติ ด้วย apps script

วันนี้เราพัก google sheet มาดู google form สักหน่อย แต่ว่าจะพูดถึง apps script เสียส่วนใหญ่
การตั้งค่าฟอร์มให้เปิดปิดอัตโนมัตินั้นไม่ยากเลย สคริปต์สั้นนิดเดียว จะยากที่สุดก็คือในส่วนของการตั้งเงื่อนไขเวลา
ทำสำเนาไฟล์ตัวอย่างได้จาก : https://docs.google.com/forms/d/e/1FAIpQLSc8EEg7TCP3ucQoZN7cpQKLCAqzPb4iBvxGfUeAUSrmI9BLHg/viewform?usp=sharing
ทำสำเนาไปเท่านั้นนะ อย่าไปแก้ไขอะไรล่ะ แต่ถ้าสร้างใหม่แล้วทำด้วยตนเองจะเข้าใจกว่ามากเลยนะ
1) สร้าง google form โดยการเข้าไปที่ drive แล้วกด "+ ใหม่" ➜ "Google ฟอร์ม" ตามภาพ
ภาพที่ 1
ให้เราเปลี่ยนชื่อ form จาก "ฟอร์มไม่มีชื่อ" ไปเป็น "ทดสอบเปิดปิด" และลบข้อคำถามออกไป ให้เหลือ form เปล่า ๆ ที่มีแค่ชื่อเรื่องเท่านั้น
ภาพที่ 2
กดเมนูเลือก "<> โปรแกรมแก้ไขสคริปต์"
ภาพที่ 3
เปลี่ยนชื่อโครงการเป็น "ทดสอบเปิดปิด" และเปลี่ยนชื่อฟังก์ชันเป็น "timer"
ภาพที่ 4
2) สร้างตัวแปรเวลา
ให้เราใส่สคริปต์นี้ไปที่ตัวฟังก์ชัน timer()
var now = new Date
console.log('now = ' + now)
กดบันทึกแล้วเรียกใช้ฟังก์ชัน timer จะได้ผลลัพธ์ตามภาพ
ภาพที่ 5
ตัวแปร now ของเรา ได้ถูกกำหนดให้เป็นเวลาปัจจุบัน ด้วยสคริปต์ new Date โดยข้อมูลมีตั้งแต่ วัน, เดือน, วันที่, ปี, ชั่วโมง, นาที, วินาที, เขตเวลา
ต่อไปให้เราปรับตัวฟังก์ชัน timer ใหม่เป็น
var now = new Date
var day = now.getDay()
var month = now.getMonth()
var date = now.getDate()
var year = now.getFullYear()
var hour = now.getHours()
var minute = now.getMinutes()
var second = now.getSeconds()
console.log('now = ' + now)
console.log('day = ' + day)
console.log('month = ' + month)
console.log('date = ' + date)
console.log('year = ' + year)
console.log('hour = ' + hour)
console.log('minute = ' + minute)
console.log('second = ' + second)
เมื่อบันทึกและเรียกใช้ฟังก์ชัน timer จะได้ผลดังภาพ
ภาพที่ 6
จะเห็นว่าจากข้อมูลในตัวแปร now ตัวแปรเดียวสามารถแยกย่อยออกมาเป็นข้อมูลต่าง ๆ
  • getDay() คืนค่าวันในสัปดาห์ 0 = อาทิตย์, 1 = จันทร์, ..., 6 = เสาร์
  • getMonth() คืนค่าเดือนในปี 0 = มกราคม, 1 = กุมภาพันธ์, ..., 11 = ธันวาคม
  • getDate() คืนค่าวันที่
  • getFullYear() คืนค่าปี ค.ศ.
  • getHours() คืนค่าเวลาชั่วโมง
  • getMinutes() คืนค่าเวลานาที
  • getSeconds() คืนค่าเวลาวินาที
จะกำหนดเงื่อนไขเวลาอะไรที่อิงกับปัจจุบันก็ใช้ตัวแปรตามข้างต้น
3) ตั้งเงื่อนไขเปิดปิดฟอร์ม
ให้เราใส่สคริปต์ด้านล่างนี้เพิ่มไปในฟังก์ชัน
FormApp.getActiveForm().setAcceptingResponses(true)
จากนั้นเมื่อเราเรียกใช้ จะมีการขออนุญาตให้สามารถแก้ไขฟอร์ม ให้เราอนุญาต
  • FormApp คือ เรียกใช้สคริปต์ที่เกี่ยวกับฟอร์ม
  • .getActiveForm() คือ ฟอร์มที่สคริปต์นี้ติดอยู่
  • .setAcceptingResponses(true) คือ ตั้งค่าฟอร์มให้เปิด ถ้าเปลี่ยน true เป็น false ก็คือตั้งค่าฟอร์มให้ปิด
ภาพที่ 7
สามารถลองเปลี่ยน true เป็น false แล้วเรียกใช้สคริปต์ดู จะเห็นว่าฟอร์มนั้นจะปิด แต่เมื่อเป็น true ฟอร์มจะเปิด
ดังนั้น ถ้าเราใส่เงื่อนไขไปที่วงเล็บสุดท้ายให้ถูกต้องกับที่เราต้องการ ฟอร์มก็จะสามารถเปิดปิดได้ด้วยสคริปต์นี้ของเรา
เช่น ถ้าเราต้องการให้ฟอร์มเปิดทุกวันในเวลา 8:00 - 12:00 เราจะใส่สคริปต์ในวงเล็บเป็น
hour >= 8 && hour < 12
  • "มากกว่า" ใช้ >
  • "น้อยกว่า"ใช้ <
  • "มากกว่าหรือเท่ากับ" ใช้ >=
  • "น้อยกว่าหรือเท่ากับ" ใช้ <=
  • "เท่ากับ" ใช้ ==
  • "ไม่เท่ากับ" ใช้ !=
  • "และ" ใช้ && ต้องจริงทั้ง 2 ฝั่ง จึงจะได้ค่าตรรกะเป็น true
  • "หรือ" ใช้ || ต้องจริงอย่างน้อย 1 ฝั่ง จึงจะได้ค่าตรรกะเป็น true
ภาพที่ 8
นิพจน์ตรรกะ "hour >= 8 && hour < 12" ก็หมายถึง hour มีค่ามากกว่าหรือเท่ากับ 8 และ น้อยกว่า 12 เวลาสคริปต์คำนวณ ก็จะ true ตั้งแต่ 8:00 ไปจนถึง 11:59
ถ้าเราใช้ "hour >= 8 && hour <= 12" จะ true ไปจนถึง 12:59 เพราะเมื่อเวลา 12:59 ตัวแปร hour จะยังคงเป็น 12 อยู่
หากเราต้องการให้ฟอร์มเปิดตลอดยกเว้นช่วง 11:00 - 13:00 ให้ใช้นิพจน์
hour < 11 || hour >=13
หากเราต้องการให้ฟอร์มเปิด 8:00 - 16:30 ให้ใช้นิพจน์
(hour >= 8 && hour < 16 ) || (hour == 16 && minute <=30)
หากเราต้องการให้ฟอร์มเปิด 8:30 - 11:30 ให้ใช้นิพจน์
(hour == 8 && minute >= 30) || (hour > 8 && hour <11) || (hour == 11 & minute <=30)
หากต้องการให้เปิดวันจันทร์ถึงศุกร์ 9:00 - 12:00 ให้ใช้นิพจน์
day >= 1 && day <= 5 && hour >=9 && hour < 12
โดยทั่วไปแล้วเราจะไม่ตั้งค่าละเอียดถึงระดับวินาที เพราะสคริปต์เราสามารถเรียกใช้ได้ถี่สุดตามเวลาคือทุก 1 นาที
4) ตั้ง trigger ให้สคริปต์ทำงานอัตโนมัติ
เนื่องจากเราไม่สามารถมาคอยกดเรียกใช้สคริปต์ตลอดเวลาเพื่อให้มันเปิดปิดฟอร์มให้ เรามีวิธีเรียกใช้งานสคริปต์อัตโนมัติ คือการตั้ง trigger
เลือกไปที่ "⏰ ทริกเกอร์" ที่เมนูด้ายซ้าย แล้วเลือก "+ เพิ่มทริกเกอร์" ด้านล่างขวา
ภาพที่ 9 - 10
ตั้งค่า trigger
เลือกแหล่งที่มาของกิจกรรม ➜ ตามเวลา
เลือกประเภทของทริกเกอร์ตามเวลา ➜ เครื่องมือจับเวลาเป็นนาที
เลือกช่วงนาที ➜ ทุกนาที
ภาพที่ 11
กดบันทึก และอนุญาตให้ดำเนินการได้ตามที่ระบบร้องขอ
เพียงเท่านี้จะปิดฟอร์มตอนเที่ยงคืน หรือตั้งให้เปิดทุกปีในวันวาเลนไทน์ ก็ไม่ต้องลำบากเราอีกต่อไป
หากเห็นว่าบทความนี้เป็นประโยชน์ กดไลค์กดแชร์เป็นกำลังใจให้ผู้เขียนด้วยนะฮับ
โฆษณา