12 พ.ย. 2019
เรยรี นรกรู้ ารสรู้รางโปรเจจค็
Google Apps Script
เรยีร บเรยีร งโดย
วสัสนต์ต คณุค ดลดิ กเศวต
[email protected]
Line ID : wasankds
08-1459-8343
www.poeclub.org
สารบับญ
คาค นาค ..................................................................................6
บททร่ีท 1
โปรเจคจ็ 01 สรรูา้ ง Mail Merge จาก Sheets ไป Docs........................9
1.1. ทมที่ าของโปรเจคจ็ 01 ................................................................................................ 10
1.2. ภาพรวมโปรเจจ็ค 01 ................................................................................................ 10
1.2.ก.) ขอ้ข มลูม ในไฟล์ล Template หรรอื ไฟล์ลตข้นทาง (10)
1.3. พัพฒนาการทที่ 1 : กอ๊ก ปปี้ยป ย่อหน้าน จาก Doc1 ไป Doc2 ...............................................11
1.4. พพัฒนาการท่ีท 2 : กอก๊ ปปย้ีป อ่ย หนาน้ จาก Doc1 ไป Doc2 + แทนทที่ขอ้น ความ ..................12
1.4.ก.) คน้ข หา 1 ข้อข ความใน 1 ยอ่ย หน้ขา (ทดสอบดูมกยอ่ น) (12)
1.4.ข.) คน้ข หา 1 ขอ้ข ความ ในทุทกยยอ่ หน้าข (12)
1.4.ค.) คขน้ หาหลายขข้อความ ในททกุ ย่อย หนข้า (13)
1.4.ง.) คน้ข หาหลายขอข้ ความ ในทุทกย่ยอหนา้ข – สรขา้ งเปป็นฟฟังกล์ช่นชั (2 พาราฯ) (13)
1.4.จ.) เปล่ยลัช นขขอ้ ความคงท่ลัชเปปน็ พารามิมเตอร์ล (3+2 พาราฯ) (14)
1.5. พฒัพ นาการทที่ 3 : เตรยท มขอน้ มูมลจากไฟล์ล Google Sheet ..........................................14
1.5.ก.) ทดลองเอาขอข้ มมูลจาก Google Sheet มา Log ดมู(14)
1.5.ข.) เอาข้อข มูลม จากชลีช้ท ไปใสใย่ นเอกสาร(15)
1.6. ยย่อหนน้าทีเท่ ปนป็ List ................................................................................................... 15
1.6.ก.) ตรวจสอบชนมิดยย่อหนข้า (16)
1.6.ข.) ใช้ข IF ตามชนมิดของยย่อหนา้ข (17)
บททรีท่ 2
โปรเจค็จ 02 ส่งส เมลล์โดยใชรู้ MailApp.............................................19
2.1. ทมที่ าของโปรเจจ็ค 02 ................................................................................................ 20
2.2. ภาพรวมโปรเจจค็ 02 ................................................................................................ 20
2.3. พพฒั นาการท่ีท 1 - จบพั คาย่ ในคอลัมพ นอล์ อกมา Log ดูม .....................................................21
2.4. พฒัพ นาการท่ีท 2 – ใช้น MailApp สง่ย เมลล์ ....................................................................21
2.5. พพัฒนาการทที่ 3 – จพับเนนอื้ หาใน Template ออกมา Log ดมู .....................................22
2.6. พฒัพ นาการทที่ 4 – แทนท่ีทขอน้ ความใน Template .....................................................23
2.7. พพัฒนาการทที่ 5 – สง่ย Mail Merge email ...............................................................24
2.8. พพัฒนาการท่ที 6 – ส่งย ตาม Quota limit ...................................................................25
2.9. พพัฒนาการทที่ 7 – สรน้างปปมุ่ ....................................................................................... 26
บททท่ีร 3
โปรเจ็จค 03 Mail Merge จาก Sheets โดยใชู้ร HTML Template..........27
3.1. ทมีท่ า ........................................................................................................................ 28
3.2. พพัฒนาการทที่ 1 : เตรยท มพรนอ้ มไฟลล์ Google Sheets ...............................................28
3.2.ก.) สรข้างไฟลล์ Google Sheet (28)
3.2.ข.) สรขา้ งไฟลล์ Google Apps Script (28)
3.3. พฒัพ นาการทที่ 2 : สราน้ ง Template ไฟลล์ HTML ......................................................28
3.4. พพัฒนาการท่ีท 3 : แทรกสครปิร ตเล์ ตรทยมเรทยกใชน้ฟงฟั กล์ชทพนีั่ ...............................................29
3.5. พัฒพ นาการท่ีท 4 : ดดึงขอมลมู จาก Google Sheets .....................................................30
3.5.ก.) ดงึด ขอมลูม จาก Google Sheets มา Log ดูม (30)
3.5.ข.) ใช้ข forEach เข้ขาไปดึดงอลเมลลท์ ทุกบรรทชดมา Log ดูม (30)
3.6. พฒัพ นาการทที่ 5 : วนหลปูม สยง่ เมลล์โดยใช้น Template จากไฟลล์ HTML .......................31
3.7. พัพฒนาการทีท่ 6 : สร้นางป่ปมุ เพี่อทน รพนั สครรปิ ตล์ .................................................................33
3.8. พฒัพ นาการทที่ 7 : ฝาก Subject และ Name ไวใ้น นชนื้ทท ทีท่ 2 .......................................34
3.9. พพฒั นาการทท่ี 8 : สง่ย ใครบน้าง .................................................................................... 35
3.10. พพฒั นาการท่ที 9 : เคร่นทอี งมนอชยว่ ยสร้นางโค้นด HTML ...................................................37
บททีท่ร 4
โปรเจค็จ 04 สส่งอรเี มลข์ล อบคณคุ เม่มีทอกรอกแบบฟอรมล์ ..........................39
4.1. ทที่มา ........................................................................................................................ 40
4.2. เตรทยมพรอน้ ม ........................................................................................................... 40
4.2.ก.) สร้าข ง From (40)
4.2.ข.) สร้ขางโปรเจ็คจ Google Apps Script สาส หรบช Form (41)
4.2.ค.) สรา้ข งไฟลล์ email.html ในโปรเจ็จค Google Apps Script(42)
4.3. พฒัพ นาการท่ีท 1 : ทดสอบสงย่ อเท มลจล์ าก Tempalte ...................................................42
4.4. พพัฒนาการทีท่ 2 : รบพั คย่าจาก Form submit ............................................................44
4.5. พฒัพ นาการทที่ 3 : สรนา้ ง Trigger เพี่ทอน รนัพ ฟงัฟ กลช์ ันพที่ ตาม Event .....................................45
4.6. ทดสอบกรอกแบบฟอรล์ม ......................................................................................... 47
บททีทร่ 5
โปรเจค็จ 05 สรา้รู งชู้รอยส์ลใหรู้ Dropdown ใน Form จากข้อรู มลร ใน Google Sheet.....49
5.1. ทมีท่ า ........................................................................................................................ 50
5.2. เตรยท มพร้นอม ........................................................................................................... 50
5.3. พพฒั นาการท่ีท 1 : หา ID ของ Item .......................................................................... 51
5.4. พพัฒนาการที่ท 2 : จบพั คปณสมบัพตริตาย่ งๆของ Item มา Log ดูม .......................................51
5.5. พฒัพ นาการทที่ 3 : ใสย่ชนอ้ ยสใล์ ห้นกบพั คคาถาม ....................................................................52
5.6. พฒพั นาการทที่ 4 : แยกฟงัฟ ก์ลชี่ทัพน .................................................................................. 52
5.6.ก.) แยกฟังฟ กลช์ นัช่ คร้งีช ท่ชลั 1 (52)
5.6.ข.) แยกฟังฟ กล์ชช่ันคร้งชี ท่ัลช 2 (54)
5.7. แกนไ้ ข Form และ Google Sheet ..........................................................................55
5.8. พพัฒนาการท่ีท 5 : จบพั ข้นอมูมลใน Google Sheet ไปสร้นาง Item ใน From .................55
5.8.ก.) จชบแถวคสาถามมา Log ดมู (55)
5.8.ข.) จบช แถวคสาถามมา Log ดมู - ดขมู ้อข มลมู เพชมั่ิม (56)
5.8.ค.) จบช ชอ้ข ยส์มล า Log ดูม (56)
5.8.ง.) จบช ชขอ้ ยสม์ล า Log ดูม (57)
5.8.จ.) จชบขอ้ข มลูม ใน Google Sheet ไปสรข้าง Item ใน Form (57)
5.8.ฉ.) กาส จชดคา่ย ว่ยางในอาเรย์ชล ข้อยสล์ (58)
5.9. พพัฒนาการท่ีท 6 : ปอ้ป งกพัน Error ............................................................................... 58
บททีท่ร 6
โปรเจจ็ค 06 สรา้รู ง Dropdown แบบ 3 ระดบบั ..................................61
6.1. ทมที่ า ........................................................................................................................ 62
6.2. พฒพั นาการทท่ี 1 : ทดสอบสราน้ ง Validation .............................................................62
6.2.ก.) ทดสอบสร้าข ง Validation (62)
6.2.ข.) สรขา้ งเปนป็ ฟงฟั กลช์ ชั่นสสาหรบช สร้ขาง Validation ใหขก้ ชบเซลลล์ (64)
6.3. พฒพั นาการท่ที 2 : สรน้างฟงัฟ ก์ลชพ่ีนัท onEdit ....................................................................64
6.3.ก.) แก้ไข ขทชลเั่ ซลลล์ไหนก็จไดข้ มลผลตย่อเซลล์ล B2 (64)
6.3.ข.) แก้ขไขทัชล่เซลล์ไล หนกไ็จ ดข้ มผล ลต่อย เซลลล์ท่ัชลอยตยู่ม ดิม กนช (66)
6.3.ค.) แกข้ไขทล่เชั ซลล์ใล นคอลชมน์ล A เท่ยาน้ชีน จึงด จบช คยา่ ไปใชข้ (67)
6.3.ง.) มผล ลเฉพาะชชลีท้ ท่ชัรล ะบทเุ ทา่ย น้นชี (67)
6.4. พพัฒนาการทีท่ 3 : จบพั ขน้อมูลม ในอกท ช้ทืนท มาทาค เปปน็ List ให้นกพับ Dropdown ....................67
6.4.ก.) จชบขอข้ มูมลในอกล ช้ีลชทมาทาส เปน็ป List ใหข้กบช Dropdown (67)
6.4.ข.) เพิม่ชัมคา่ย คงทลช่ั firstLevelColumn และ secondLevelColumn (69)
6.4.ค.) แยกฟงัฟ กลช์ ่ชัน (70)
6.5. พพัฒนาการที่ท 4 : สร้าน ง Validation ใหกน้ พบั ระดพับทที่ 2 ................................................71
คาค นาค
ผมูขเ้ ขลยน เขลยนหนชงสือร เล่ยมนลีช้ “เรทยนร้นมกู ารสรนา้ งโปรเจจ็ค Google Apps Script” จทดุ ประสงคด์ล ชี้งเดมิม ก็จ
ครือ เก็จบไวอ้น า่ย นเอง
เม่ชรัือผมูข้เขลยนศดึกษาเรรื่ัชองอะไร กจ็จะไปเรลยนรขู้มจากสรช่ืัอออนไลน์ลในอิมนเตอรล์เนจ็ต ทชี้งคอรล์สออนไลน์ล วิมดลโอ
หรือร เอกสาร ทีช้งในแบบฟรลและเสยล เงิมน
ในยุทคปัฟจจทุบชนเราตข้องเรลยนรูม้ขอะไรใหข้เร็จว โดยเฉพาะเรื่ัรชองของ IT ผูข้มเขลยนจดึงตช้ีงใจจะดมูวิมดลโอเพลยงรอบ
เดลยว จดึงดูมไปพิมมพ์ลสรุทปไปดข้วย เวลาจาส อะไรไม่ยไดข้ มาดูมจากทล่ัชพมิมพล์สรทุปไว้ขง่ยายกว่ยาการไปย้ขอนดูมจากวิมดลโอ
นอกจากนชลี้ กจ็ยงช นสามาทบทวนไดงข้ า่ย ย ในอนาคตสามารถเพั่มมชิ เตมิมเสริมม แต่ยงเน้รืีชอหาได้ขเรั่รอชื ยๆดข้วย
ผ้มูนเขทยน มทหนัพงสนออทกเลย่มหนึ่ีทดงทีท่ต้นองใช้นคูย่มกพับหนพังสนอเล่ยมนื้ทน กจ็ครือ หลพักการเขทยนโปรแกรมดน้วย
Google Apps Script เปปน็ หนชงสอรื เกยลชั่ วกบช พีชืร้นฐานและหลชกการสาส คชญในการเขลยนโปรแกรมด้ขวย Google
Apps Script เมัชืร่อผมูข้เขลยนเรลยนร้ขมูอะไรจากโปรเจจ็คต่ยางๆในหนชงสรือเล่ยมน้ีชล ซชึั่ดงก็จมลทัช่ลมาจากของคนอชั่ืรน อะไรนย่า
สนใจ ไมย่เข้ขาใจ ก็จไปหาข้ขอมูมลเพัิมช่มเตมิมเปป็นเรช่รัืองๆ แลข้วจชดหมวดหมมยู่ใหมย่แยกไปเขลยนไว้ขในหนชงสืรอเล่ยมดชงกลย่าว
ฉะนช้ีนจดึงตอ้ข งใชค้ข ู่กมย ชน
หนชงสรือเล่ยมนช้ลี ความตีช้งใจดงชี้ เดิมมของผ้ขูมเขลยน กจ็คืรอ ตงนพื้ั ใจเกจ็บไวน้อ่ยานเองคนเดทยว เหตปเพราะเนนื้อหาเอา
มาจากของคนอ่นทีนเปป็นส่วย นใหญ่ย ผม้เูน ขทยนเขยท นเพ่มิีทร ไปไมม่ย าก
อยย่างไรกจด็ ล อตุท สย่าห์ลพิมม พ์ลไวเข้ ป็ปนหนชงสรือแล้ขว จะเกจบ็ ไว้ขอย่านคนเดลยวกจ็รขู้มสดึกเสลยดาย ผู้มขเขลยนจึดงเอามาแบย่ง
ปฟนั
เนีท่นองด้วน ย ผนม้เู ขทยนใหน้ความสาค คพญั กพับประเด็จนด้นานลขิร สรทิ ธิร์ธมาก ฉะนัน้พืนจึดงขอแจน้งไว้น ณ ทีท่นท่ีตั้นืพงแตย่ต้นน
ก็จคอน
1. เน้รืชีอหาในหนชงสรือ ผมขู้เขลยนรวบรวมมาจากแหลย่งต่ยางๆในอิมนเตอรล์เนจ็ต ซ่ัดึชงจะพยายามใหข้มากทล่ชัสทุด ทลั่ช
จะบอกลมงิ คห์ล รรอื แหลย่งทมัลช่ าในแตย่ละหชวขข้อ เพราะเขลยนหนชงสืรอเล่ยมน้ีชลเขลยนไวข้นานแล้ขว บางเร่รืชัองลรืมก๊กอปปป้ีลมิงคล์
มาแปะไวข้
2. ผม้เขู ขยล นเปนป็ เพยล งผร้มูข วบรวมเน้ชรีอื หา เขลยนเพชัิม่มเติมม เพยล งเล็กจ นอ้ข ย
3. หนชงสรอื เลยม่ น้ลีชแจกฟรล ผ้ขมูเขลยนไมยม่ ลรายไดจ้ข ากหนชงสือร เล่มย นล้ชี
ขอแสงความนชบถอรื
วสชนตล์ คุทณดลิม กเศวต
[email protected]
081-459-8343
Line ID : wasankds
บทททีร่ 1
โปรเจ็จค 01
สรรูา้ ง Mail Merge
จาก Sheets ไป Docs
1.1. ทม่ที าของโปรเจจ็ค 01
Mail Merge Google Sheets to Google Docs - No Addons - Apps Script Tutorial
https://www.youtube.com/watch?v=QNPPEB64QbI&list=PL0cbWZdynvACLB4ol4gHkuXYqyynMihRj&index=1
1.2. ภาพรวมโปรเจ็จค 01
โปรเจ็จคนีลช้ เปป็นการสร้ขาง Mail Merge โดยเอาข้ขอมูมลรายชร่ชัือในไฟล์ล Google Sheet ไปพมิมพล์เป็ปน Mail
Merge ลงในไฟลล์ Google Docs โดยเราสามารถสราข้ งไฟลท์ล ั่ชลเปน็ป Template ในการสร้าข ง Mail Merge ได้ข
โปรเจค็จ นีช้ใล ชไ้ข ฟล์ล 3 ไฟล์ล ดงช ตอย่ ไปนลชี้
1.2.ก.) ขอข้ มลมู ในไฟลล์ Template หรอรื ไฟลต์ล ้ขนทาง
ไฟล์ล docTemplate (Google Docs)
เป็ปนไฟล์ล Template มขล อ้ข มลูม ดงช ต่ยอไปนี้ชล
Dear {first}
สววสั ดดีทดจีท่ ะบอกวา่ว คคณุ {first} {last} เบอรล์โทรศพัว ทล์ {phone} ไดข้รวบั รางวัลว …
ขอแสดงความนับว ถอืร
วสนัว ต คคณุ ดลดิ กเศวต
ไฟลล์ docFinal (Google Docs)
เปปน็ ไฟลลว์ า่ย งๆ ทลชค่ั อยรบช ผลจากการพมมิ พล์ Mail Merge
ไฟล์ล sheetData (Google Sheets)
เปปน็ แหลงย่ ข้อข มมูลสาส หรชบทาส Mail Merge ซดงชั่ึ มลขอ้ข มลูม ดงช ตยอ่ ไปนชลี้
A B C D E
1 ช่รอทืี นามสกคุล อีเด มล์ล เบอรโล์ ทรศัพว ทล์ เมอืร ง
2 ตวัว เลล็ก คคณุ ดิดลกเศวต [email protected] 091-399-6766 กรงคุ เทพฯ
3 นภาพร ศิดลาพันว ธ์ล [email protected] 095-768-0670 พดิษณโุค ลก
4 ภมคู ลวบั สวรรค์ลบนดดิน [email protected] 081-459-8343 เพชรบมูรณล์
5
6
10 เรทยนรกนู้ม ารสรน้างโปรเจ็จค Google Apps Script เล่วม 1
1.3. พฒัพ นาการทีท่ 1 : ก๊กอปปปย้ี ย่อหน้นาจาก Doc1 ไป Doc2
โคด้ข ตอย่ ไปนชีล้ กอก๊ ปปย้ีป อ่ย หนา้ข จาก ไฟลล์ docTemplate ไปท่ที ไฟล์ล docFinal
function pDoc1_to_Doc2_R1() {
// ID ของไฟลล์ Google Docs ททเี่ ปนป็ Template
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
// ID ของไฟลล์ Google Docs ทรท อรับร ผลจากการพพมิ พ MailMerge
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
// ID ของไฟลล์ Google Sheet ไฟลท์ล เ่ีท กบก็ ตารางขขอ้ มูมล
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE" ;
// เปปดิ ไฟล์ล Google Docs ทั้ทรง 2 แลว้ข เก็กบไวใ้ข นตัรวแปร
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
// จบรั ยอย่ หนา้ข ทั้ทรงหมดในไฟลล์ Template มาเก็บก ไวใข้ นตรัวแปร
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
// Logger.log(docTemplateParagraphs); - log ดตูม วัร แปร จะพบวย่าเปป็นอาเรย์ล
docTemplateParagraphs.forEach(function(p){
// วนเข้าข ไปในสมาชกิพ อาเรยลแ์ ตย่ละตวรั เพพีทอ่ กอ๊ก ปปปีย้ ย่อหนา้ข ไปไวข้ในอกท ไฟลล์ /*ดูหม มายเหตคุ 2 */
docFinal.getBody().appendParagraph(p.copy());
});
// Logger.log(docTemplateParagraphs); - log ดยมู ่อย หน้าข จะพบวย่าเปป็นอาเรยล์
}
เมชั่รือรชนโค้ขด ยอย่ หนขา้ ทงชี้ หมดในไฟล์ล Template จะถมกู กอ๊ก ปป้ไปี ปทช่ไัล ฟล์ล Final
หมายเหตป 1
appendParagraph() ก็จตามความหมาย กคจ็ ือร ตอ่ย ทข้ายดข้วยย่อย หนา้ข เช่นย
appendParagraph("ย่อย หนา้ข ที่ท 1")
หมายเหตป 2
ถ้ขาใชเ้ข ปนป็ บรรทดช ดา้ข นล่ยางจะปรากฎ Error “Element must be detached.” (detach = แยกออก)
docFinal.getBody().appendParagraph(p);
ย่ยอหนา้ข ตข้นทางตอ้ข งถมูกแยกออกมากย่อน โดยการกก๊อปปป้ี จากนีช้นจดึงจะวางลงไปในไฟล์ปล ลายทาง ฉะนชี้นแก้ข
เปปน็
docFinal.getBody().appendParagraph(p.copy());
เรลยบเรยล งโดย วสนัร ต์ล คณุค ดพิลกเศวต ([email protected]) 11
1.4. พพัฒนาการท่ที 2 : กอ๊ก ปปปี้ย่ยอหน้นาจาก Doc1 ไป Doc2 + แทนทท่ขี ้นอความ
จากไฟลล์ Template ทลชั่เป็ปนต้ขนทาง ย่ยอหน้ขาทช่ัล 1 มลขข้อความเช่ยน {name} เราจะค้ขนหาข้ขอความ
{name} แล้ขวแทนทั่ลชดขว้ ยขอ้ข ความ เชยน่ “วสนัพ ต”์ล จากนนีช้ จงึด กอ๊ก ปปป้ีไปไวข้ในไฟลล์ Final ทล่ชัเปป็นปลายทาง
1.4.ก.) คน้ข หา 1 ขอ้ข ความใน 1 ยว่อหนาข้ (ทดสอบดูมกอว่ น)
ทดสอบ กก๊อปปปย้ี อ่ย หนข้า คขน้ หาและแทนทัข่ลช อ้ข ความ จากน้ชนี วางไปยชงไฟลปล์ ลายทาง เพลยง 1 ยอ่ย หนข้ากอ่ย น
function pDoc1_to_Doc2_R2_1() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE";
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
// ไฟล์ตล ขน้ ทาง
var docTemplateParagraphs_1= docTemplate.getBody().getParagraphs()[0] // จบรั ย่อย หนา้ข ทที่ 1
.copy() // Copy
.replaceText("{first}", "วสวันต"์ล ) ; // คน้ข หาและแทนทที่
// ก๊กอปป้ปียอ่ย หนาข้ ทคท่ี ้นข หาและแทนท่ทแี ลวข้ ไปยงัร ไฟล์ลปลายทาง
docFinal.getBody().appendParagraph(docTemplateParagraphs_1.copy());
}
1.4.ข.) คนข้ หา 1 ขข้อความ ในทกุค ยว่อหนา้ข
เหมือร นโคข้ดในขอข้ กอย่ นหนข้า ครชี้งนจล้ชี ะทสากบช ทุทกยอ่ย หน้าข ในไฟลลต์ ขน้ ทาง
function pDoc1_to_Doc2_R2_2() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE";
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
// จบัร ทคุกย่อย หนา้ข ในไฟลตล์ นข้ ทาง
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
// กอ๊ก ปป+ป้ี คนข้ หาและแทนทีท่+วางไปทที่ไฟลป์ล ลายทาง โดยททาททละยอ่ย หนา้ข โดยใชข้ forEach
docTemplateParagraphs.forEach(function(p){
docFinal.getBody().appendParagraph(p.copy().replaceText("{first}", "วสนัว ต"์ล ));
});
}
12 เรยท นรกูม้น ารสร้นางโปรเจจ็ค Google Apps Script เล่วม 1
1.4.ค.) คขน้ หาหลายข้ขอความ ในทกุค ยอ่ว หนาข้
โคด้ข ขข้อกอย่ นหนขา้ ค้ขนหาและแทนทั่ลเช พลยง 1 ขข้อความ แต่ยโคดข้ ตอย่ ไปน้ลชจี ะ คขน้ หาและแทนทชลั่หลายขข้อความ
function pDoc1_to_Doc2_R2_3() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE";
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
// Get ย่อย หนขา้ ทั้งทร หมดในไฟลล์ต้ขนทาง
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
// กอ๊ก ปป้ปี + แทนทีท่หลายขอข้ ความ + วางลงไฟล์ปล ลายทาง โดยทาท ททละยอ่ย หนขา้ โดยใชข้ forEachLoop
docTemplateParagraphs.forEach(function(p){
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}","มะนาว")
.replaceText("{last}","เปรีด้รยวจีดดร้ ")
.replaceText("{phone}","080-000-0000")
);
}); //จบ forEach
}
1.4.ง.) ค้ขนหาหลายขอ้ข ความ ในทกุค ยว่อหนาข้ – สรข้างเปน็ป ฟฟงั กชล์ วัีท่น (2 พาราฯ)
โคข้ดตย่อไปน้ีลช ใหข้ผลเหมรือนกชบโคข้ดกย่อนหนข้า แตย่คร้ชีงน้ีลชจะสรข้างเปป็นฟัฟงกล์ชัช่นแยกออกมา ใชข้การสย่งผ่ยาน
พารามิเม ตอรล์ เพชรัอ่ื ใหขโ้ คดข้ อา่ย นงา่ย ย
function pDoc1_to_Doc2_R2_4() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE";
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
docFinal.getBody().clear(); // ลา้ข งทุกค อย่ยางออกไปจาก Body ในเอกสารกอ่ย น
// เรยท กใช้ขฟัฟงก์ลชที่ัรน – โดยสง่ย 1.ไฟลต์ล ้ขนทาง และ 2.ไฟล์ปล ลายทาง ไปประมวลผล
createMailMerge(docTemplateParagraphs,docFinal);
function createMailMerge(docTemplateParagraphs,docFinal){
docTemplateParagraphs.forEach(function(p) {
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}","มะนาว")
.replaceText("{last}","เปรดีร้ยวจีร้ดด")
.replaceText("{phone}","080-000-0000")
);
}); //จบ forEach
}
เรลยบเรยล งโดย วสนัร ต์ล คณุค ดิพลกเศวต ([email protected]) 13
1.4.จ.) เปล่ียทด นข้ขอความคงที่เดท ปน็ป พารามดเิ ตอร์ล (3+2 พาราฯ)
ชข้อกย่อนหน้ขา ฟิฟกข้ขอความทชั่ลจะมาแทนทัชล่อยูมย่ในฟฟังกล์ช่ชันภายนอก แต่ยข้ขอนลชี้ จะสย่งข้นอความทท่ีจะมาแทนทท่ี
เปน็ป พารามเิร ตอร์ลไปททีฟ่ ฟงั กช์ล ีันพ่ท เตรยท มไว้สน าค หรพับการไปดึดงขอ้น มูลม มาจากไฟล์ล Google Sheet
function pDoc1_to_Doc2_R2_4() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE";
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
docFinal.getBody().clear();
// เรยท กใชขฟ้ ฟงั กช์ล ่ีทรัน – โดยส่ยงพารามเิพ ตอรล์ 5 ตรวั
// 1.ชอีทพ่ 2.นามสกคุล 3.เบอรโล์ ทรฯ 4.ไฟตนข้ ทาง และ 5.ไฟลปล์ ลายทาง
createMailMerge("ชืี่อรท ","นามสกคุล","เบอรล์โทรศวพั ท์ล",docTemplateParagraphs,docFinal);
}
function createMailMerge(first,last,phone,docTemplateParagraphs,docFinal){
docTemplateParagraphs.forEach(function(p) {
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}",first)
.replaceText("{last}",last)
.replaceText("{phone}",phone)
);
}); //จบ forEach
}
1.5. พฒพั นาการที่ท 3 : เตรทยมข้อน มูมลจากไฟล์ล Google Sheet
1.5.ก.) ทดลองเอาขอ้ข มลูม จาก Google Sheet มา Log ดูม
โคดข้ ตอ่ย ไปนีช้ล จชบขขอ้ มลมู จากตารางในไฟลล์ Google Sheet มา Log ดมู
function Sheet2Docs_1() {
// ขอ้ข มูลม สทาหรรับเปดิป ไฟล์ล และ ชัทท้
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE" ;
var wsSheetName = "data" ;
// เอาชท้ัทในไฟล์ล มาใสยไ่ วใ้ข นตัรวแปร ws
var ws = SpreadsheetApp.openById(wsID).getSheetByName(wsSheetName) ;
// เอาขอ้ข มมูล มาใส่ไย ว้ใข นตัรวแปร data
var data = ws.getRange(2, 1, ws.getLastRow()-1,ws.getLastColumn()).getValues() ;
Logger.log(data);
}
14 เรทยนรกน้มู ารสร้นางโปรเจ็จค Google Apps Script เลว่ม 1
Log ดจูม ะไดข้อาเรย์ล 2 มมติ ดมิ ชงนล้ีช
Logs
[ 01 ] [ [1.0, ตัวว เลกล็ , คคุณดดลิ กเศวต, [email protected], 091-399-6766, กรคุงเทพฯ],
[2.0, นภาพร, ศิลด าพนัว ธล์, [email protected], 095-768-0670, พิดษณโคุ ลก],
[3.0, ภมคู ลัวบ, สวรรคลบ์ นดนดิ , [email protected], 081-459-8343, เพชรบูมรณล์] ]
1.5.ข.) เอาขอ้ข มลูม จากชท้ีรด ไปใส่วในเอกสาร
คราวน้ีลช จะเอาขข้อมมูลจากช้ีชทล แตย่ละบรรทดช ไปวนหลมูปเพ่ัรอชื พมมิ พ์คล าย่ ลงในไฟล์ล Google Docs ปลายทาง
function Sheet2Docs_2() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
// ขอ้ข มมูลสาท หรรบั เปดิป ไฟล์ล และ ช้ททั
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE" ;
var wsSheetName = "data" ;
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
// เอาชท้ทั ในไฟล์ล มาใสย่ไวขใ้ นตรวั แปร ws
var ws = SpreadsheetApp.openById(wsID).getSheetByName(wsSheetName) ;
// เอาข้อข มลมู มาใส่ไย วใ้ข นตรัวแปร data
var data = ws.getRange(2, 1, ws.getLastRow()-1,ws.getLastColumn()).getValues() ;
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
docFinal.getBody().clear();
// วนหลปมู เอาอาเรยท์ล ลท ะ 1 แถว(คอลมัร นล์ไหนระบไคุ ด้ข) ไปใส่ฟย งฟั กลช์ ั่ทีนร
data.forEach(function(r){
createMailMerge(r[0], r[1], r[3] , docTemplateParagraphs ,docFinal) ;
}); // End – forEach
}
function createMailMerge(first,last,phone,docTemplateParagraphs,docFinal){
docTemplateParagraphs.forEach(function(p) {
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}",first)
.replaceText("{last}",last)
.replaceText("{phone}",phone)
);
}); //จบ forEach
docFinal.getBody().appendPageBreak() ; // ขัข้ทนหนาข้ ใหมย่
}
1.6. ยอ่ย หนาน้ ททเ่ี ปนป็ List
กรณลเจอยย่อหนข้าทลั่ชเปป็น List เชนย่ Bullets หรืรอ Numbering จะพบเจอปฟัญหา ซั่ดึชงเราสามารถแกข้ไดด้ข ชงตย่อ
ไปนลีช้
เรลยบเรยล งโดย วสรันต์ล คณุค ดลพิ กเศวต ([email protected]) 15
1.6.ก.) ตรวจสอบชนิดด ยว่อหนขา้
ยอย่ หนข้าทเ่ชัล ปป็น List เมืรชั่อถมูกกกอ๊ ปปป้ไี ปท่ลชไั ฟลป์ล ลายทาง จะถูมกถอด LIst ออก กลายเปปน็ ยยอ่ หนข้าธรรมดา หาก
ตข้องการเกจบ็ List เอาไว้ข ใหท้ข าส ดงช น้ลีช
เขลยนโค้ขด ตรวจสอบชนมดิ ของ 1 ยอ่ย หน้าข กอ่ย น
var docTemplateParagraphs_1 = docTemplate.getBody().getParagraphs()[0].getType();
function MM_Doc2Sheet() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE" ;
var wsSheetName = "data" ;
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
var ws = SpreadsheetApp.openById(wsID).getSheetByName(wsSheetName) ;
var data = ws.getRange(2, 1, ws.getLastRow()-1,ws.getLastColumn()).getValues() ;
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
// ตรวจสอบชนดพิ ขอ้ข มูลม ของย่อย หนข้าทีท่ 1 *****************************************
var docTemplateParagraphs_1 = docTemplate.getBody().getParagraphs()[0].getType();
docFinal.getBody().clear();
// วนหลปูม เอาอาเรย์ลทลท ะ 1 แถว(คอลัรมนไล์ หนระบุไค ดข้) ไปใสฟ่ย ฟงั กช์ล น่ีัทร
data.forEach(function(r){
createMailMerge(r[0], r[1], r[3] , docTemplateParagraphs ,docFinal);
}); // End – forEach
ยาข้ ยไปใสใ่ย นฟงัฟ ก์ลช่ัชน แลวข้ Log ดมูก่ยอน วาย่ โคขด้ ใชขไ้ ดข้ จะพบ Type ของยอย่ หน้าข ทลชั่เปนป็ List มชล นดิม เปนป็
LIST_ITEM สวย่ นทลชัเ่ ป็ปนย่อย หนา้ข ธรรมดาเป็ปน PARAGRAPH
function createMailMerge(first,last,phone,docTemplateParagraphs,docFinal){
// Log ดมชู นิดดของยวอ่ หนา้ข
Logger.log(p.getType());
docTemplateParagraphs.forEach(function(p) {
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}",first)
.replaceText("{last}",last)
.replaceText("{phone}",phone)
);
}); //จบ forEach
docFinal.getBody().appendPageBreak() ; // ขน้ัขท หน้าข ใหม่ย
}
16 เรยท นรก้นมู ารสร้าน งโปรเจจ็ค Google Apps Script เลว่ม 1
1.6.ข.) ใช้ข IF ตามชนดดิ ของยอ่ว หนขา้
ส่วย นของฟงฟั ก์ชล ชัน่ หลกช ไมม่ย อล ะไรเปลลย่ชั นแปลง
function MM_Doc2Sheet() {
var docTemplatedID = "1Gc8MC7o4O68dVekkn0PLGCmdcWI82wUjplH-x8HwXQc" ;
var docFinalID = "1aqAv5bzhIvxWPheMpaQJu2vPTWZQQKd3qIsyGPlq-qM" ;
var wsID = "1IKcuYYWBZGgKvkLF3SNCvTM-0A7gyYjvTxzhEMmVjzE" ;
var wsSheetName = "data" ;
var docTemplate = DocumentApp.openById(docTemplatedID) ;
var docFinal = DocumentApp.openById(docFinalID) ;
var ws = SpreadsheetApp.openById(wsID).getSheetByName(wsSheetName) ;
var data = ws.getRange(2, 1, ws.getLastRow()-1,ws.getLastColumn()).getValues() ;
var docTemplateParagraphs = docTemplate.getBody().getParagraphs();
// ตรวจสอบชนพิดข้อข มลูม ของย่อย หนา้ข ทที่ 1 *****************************************
var docTemplateParagraphs_1 = docTemplate.getBody().getParagraphs()[0].getType();
docFinal.getBody().clear();
// วนหลปมู เอาอาเรยลท์ ลท ะ 1 แถว(คอลมัร นลไ์ หนระบไุค ดข้) ไปใสฟย่ งัฟ ก์ชล นรัี่ท
data.forEach(function(r){
createMailMerge(r[0], r[1], r[3] , docTemplateParagraphs ,docFinal) ;
}); // End – forEach
ส่ยวนของฟงฟั กล์ชช่ัน createMailMerge ทใัช่ล ชก้ข ๊อก ปปปีข้ ขอ้ มมูลไปทไ่ลัช ฟลล์ปลายทาง ใสย่ if เพร่อชัื ทาส ตามเงอัืรช่ นไข
ถ้ขาเปป็น PARAGRAPH กจ็ใหทข้ าส ตามปกตมิ อย่ยางทชั่ลทาส มา
แต่ยถ้ขาเปป็น LIST_ITEM หลชงจาก getBody() แล้ขว ใหข้ตย่อดข้วย appendListItem แกข้จากของเดิมมทช่ลั
เป็ปน appendParagraph จากน้ชีนแทนท่ชัลข้ขอความใน LIST_ITEM จากนช้ีนอลก ให้ขเซจ็ตรมูปแบบของ LIST_ITEM
โดยใช้ข setGlyphType() โดยเลอืร กชนมิดของ LIST_ITEM จาก DocumentApp.GlyphType.BULLET
เรยล บเรลยงโดย วสัรนต์ล คณุค ดพิลกเศวต ([email protected]) 17
function createMailMerge(first,last,phone,docTemplateParagraphs,docFinal){
docTemplateParagraphs.forEach(function(p) {
// ตรวจสอบชนดพิ ของย่อย หนาข้ แลวข้ จบรั ใสย่ไวใข้ นตวรั แปร
var elType = p.getType();
// ถ้าข เปปน็ PARAGRAPH กใก็ หข้ทาท ตามปกตพิ อยา่ย งท่ีททาท มา
if (elType == "PARAGRAPH" ) {
docFinal.getBody().appendParagraph(p.copy()
.replaceText("{first}",first)
.replaceText("{last}",last)
.replaceText("{phone}",phone)
);
} // จบ if
// ถ้าข เปปน็ LIST_ITEM ก็ใก หทข้ าท ตอ่ย ไปนทั้
if (elType == "LIST_ITEM" ) {
docFinal.getBody().appendListItem(p.copy()
.replaceText("{first}",first)
.replaceText("{last}",last)
.replaceText("{phone}",phone)
).setGlyphType(DocumentApp.GlyphType.BULLET);
} // จบ if
}); //จบ forEach
docFinal.getBody().appendPageBreak() ; // ขทัข้นหน้ขาใหม่ย
}
18 เรยท นรกมูน้ ารสรน้างโปรเจจ็ค Google Apps Script เลว่ม 1
บททีท่ร 2
โปรเจ็จค 02
สงส่ เมล์โล ดยใชรู้
MailApp
2.1. ททม่ี าของโปรเจจ็ค 02
Google Sheets - Send Emails Using Apps Script JavaScript MailApp Tutorial - Part 12
https://www.youtube.com/watch?v=ZcNmur6xiX4
2.2. ภาพรวมโปรเจจค็ 02
ไฟลล์ Data_Email (Google Sheets) มลขข้อมูมลใน 2 ชที้ชล ก็คจ ืรอ
ชืนทท้ ทที่ 1 : ชนอี่ท sEmail เป็ปนขอ้ข มมูลทจล่ชั ะใชข้ส่งย อเล มลล์
A B C D
1 Email Name Class
2 [email protected] Wasan Google Sheet
3 [email protected] SnP LibreOffice Calc
4 [email protected] Poeclub Gimp
ชนทื้ท ที่ท 2 : ชอที่น sTemplate เป็นป Template สสาหรบช สย่งอเล มลล์ โดยพิมม พขล์ อ้ข ความทัจลช่ ะใชเข้ ปนป็ Template
ลงในเซลล์ล A1 เซลลล์เดยล ว
ไฟลลโ์ ปรเจ็จค Google Apps Script สรา้ข งฝัฟงไว้ขทลช่ไั ฟล์ล Google Sheet ไฟลน์ล ลชี้
20 เรทยนรกนมู้ ารสร้นางโปรเจ็จค Google Apps Script เล่วม 1
2.3. พฒัพ นาการทีท่ 1 - จบัพ คยา่ ในคอลพัมนล์ออกมา Log ดมู
จบช คาย่ ในคอลมช น์ลออกมา Log ดมู
function sendMails() {
// จรบั ไปทีท่ชั้ทท ททีเ่ ปิปดอย่มูย
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// จับร ไปททแี่ ถวสคดุ ทาข้ ย – ไดเ้ข ลขจาท นวนเตก็มเชน่ย 4
var lr = ss.getLastRow();
// ขรบั ไปทคท่ี อลัมร น์ลสดุค ท้าข ย – ไดเ้ข ลขจทานวนเต็มก เชยน่ 3 (ไมไ่ย ด้ใข ชใข้ นโค้ดข นัท้)
var lc = ss.getLastColumn();
// วนหลูมปเพอ่ีทพ ดขงค่าย ในคอลรัมน์ลทรท ะบคุ ทคกุ แถวออกมาใช้งข าน // Log ดมู
for(var i = 2 ; i <= lr ; i++) {
// จัรบคยา่ ในแถว i คอลมัร นท์ล ท่ี 1
var currentEmail = ss.getRange(i, 1).getValue();
Logger.log(currentEmail);
}; // จบ for
}
ผล - Log ค่ยาในคอลมช นล์ท่ชเัล ป็ปนอลเมลลอ์ อกมาทลละบรรทดช
Logs
[ 01 ] [email protected]
[ 02 ] [email protected]
[ 03 ] [email protected]
2.4. พฒพั นาการท่ีท 2 – ใชน้ MailApp สง่ย เมล์ล
โค้ดข ต่ยอไปนี้ลช ใช้ขคลาส MailApp สย่งเมลล์ โดยดงดึ ผรขู้ม ชบเมล์มล าจาก Google Sheet
function sendMails() { // ผูมข้รับร
// หัวร เรีอ่พท ง
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // เน้ัพอท หา
var lr = ss.getLastRow();
// เน้ัพทอหาในอเท มลล์- ทดลองสย่งสัทรน้ ๆไปกอย่ น
var body = "Hello, How are you";
for(var i = 2 ; i <= lr ; i++) {
var currentEmail = ss.getRange(i, 1).getValue();
var currentClass = ss.getRange(i, 3).getValue();
MailApp.sendEmail(currentEmail,
"Reminder : " + currentClass + " Upcoming class" ,
body
)
} ; // จบ for
}
เรลยบเรยล งโดย วสนัร ต์ล คณคุ ดลพิ กเศวต ([email protected]) 21
ผล - ผรูข้ม ชบเมลไล์ ดรข้ บช เมล์ดล ชงต่อย ไปนีลช้
2.5. พัฒพ นาการทท่ี 3 – จบพั เนนือ้ หาใน Template ออกมา Log ดูม
โคขด้ นชล้ี จะจชบเนชืี้รอหาในเซลลล์ A1 ในชลชี้ท sTemplate ออกมา Log ดูมกย่อน ซ่ดัชึงจะใช้ขเป็ปน Template ในการ
เขลยนอลเมลล์ตอย่ ไป
เนรอ่ืัช งจากเรามล 2 ชลี้ทช จงดึ ต้อข งเขยล นโคข้ดใหข้เลือร กชทชี้ล ทเัชล่ ราจะทสางานด้ขวย
function sendMails() {
// เลพอกทชท่ี ท้ทั Email – คลาข้ ยการคลกพิ เลอพ กทปท่ี ป้ายช้ัททชพี่อท Email
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // ชทท้ั Email แอคก็ ทฟท อยู่มย
var lr = ss.getLastRow();
// มทหรอพ ไมยม่ ทกไก็ ดข้
// SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sTemplate").activate();
// จบัร คา่ย ในเซลลล์ A1 ในชทท้ั sTemplate
var templateText = SpreadsheetApp.getActiveSpreadsheet().
getSheetByName("sTemplate").getRange("A1").getValue();
Logger.log(templateText); // ดผมู ลได้ขทีท่ Logs
}
ผล
Logs
[ 01 ] สววสั ดดี คุณค {name}
หลกัว สูมตร {class} กาก ลงัว จะเปดิป อบรม ในเร็ลวๆนีรด้ คคุณสามารถดรูม ายละเอีดยดได้ตข ามลดงิ ค์ตล ่วอไปนีร้ด
www.poeclub.org
ขอแสดงความนวบั ถืรอ
วสวันตล์ คุคณดิลด กเศวต
(สัวน เซฟคอสต)ล์
22 เรยท นรกู้มน ารสราน้ งโปรเจ็จค Google Apps Script เล่วม 1
2.6. พฒัพ นาการทที่ 4 – แทนที่ทข้นอความใน Template
แทนทขชลั่ ขอ้ ความในเซลลล์ A1 ในชลท้ีช sTemplate ในสวย่ นท่ลชัเป็ปน Mail Merge เชย่น {name} เปปน็ ตขน้
function sendMails() {
// เลอพ กททีช่ ท้ัท Email – คลขา้ ยการคลกิพ เลอพ กทท่ีปา้ป ยชททั้ ชอพ่ที Email
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // ชทท้ั Email แอค็ก ทฟท อยยูม่
var lr = ss.getLastRow();
// มหท รพอไมยม่ กท ไ็ก ดข้
// SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sTemplate").activate();
// จบรั ค่ยาในเซลลล์ A1 ในชททั้ sTemplate
var templateText = SpreadsheetApp.getActiveSpreadsheet().
getSheetByName("sTemplate").getRange("A1").getValue();
var templateTextReplaced = templateText
.replace("{name}","วสันว ต"์ล )
.replace("{class}","LibreOffice Base") ;
Logger.log(templateTextReplaced);
}
ผล
Logs
[บรรทรัดทท่ี 1] สวสัว ดีด คุณค วสวนั ต์ล
หลกวั สตูม ร LibreOffice Base กกาลงวั จะเปดปิ อบรม ในเร็วล ๆน้รีด คุณค สามารถดมูรายละเอยดี ดไดต้ข ามลงดิ คต์ล อ่ว ไปนีร้ด
www.poeclub.org
ขอแสดงความนบวั ถอรื
วสนวั ต์ล คุณค ดดิลกเศวต
(สนวั เซฟคอสตล์)
เรลยบเรลยงโดย วสันร ตล์ คณุค ดพลิ กเศวต ([email protected]) 23
2.7. พพัฒนาการทที่ 5 – ส่งย Mail Merge email
ขข้อนลี้ช จะเปป็นการส่ยง Mail Merge email โดยจชบตชวแปรทัชล่ใชข้เก็จบ Template และ ข้ขอมูมลรายบุทคคล
สาส หรชบการส่งย อลเมลล์ ไปใสยใ่ น for เพอรช่ัื วนหลมูปสาส หรชบส่งย อเล มลใ์ล หกข้ ชบแตล่ย ะคน
function sendMails() {
// เลอพ กทชท่ี ้ททั Email – คล้าข ยการคลกิพ เลพอกทป่ที ป้ายชททั้ ช่ีทพอ Email
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // ชทั้ท Email แอคก็ ทฟท อยูม่ย
var lr = ss.getLastRow();
var templateText = SpreadsheetApp.getActiveSpreadsheet().
getSheetByName("sTemplate").getRange("A1").getValue();
for(var i = 2 ; i <= lr ; i++) {
var currentEmail = ss.getRange(i, 1).getValue();
var currentName = ss.getRange(i, 2).getValue(); // จัรบชอพี่ท
var currentClass = ss.getRange(i, 3).getValue();
var templateTextReplaced = templateText
.replace("{name}",currentName)
.replace("{class}",currentClass) ;
var subjectLine = "แจ้งข คอร์ลสใหมว่ : " + currentClass + " กาก ลังว จะเปดิป อบรมเรวล็ ๆนี้ดร" ;
MailApp.sendEmail(currentEmail, subjectLine, templateTextReplaced) ;
} ; // จบ for
}
ผล
24 เรทยนรกมูน้ ารสรา้น งโปรเจ็จค Google Apps Script เลว่ม 1
2.8. พฒัพ นาการทีท่ 6 – สง่ย ตาม Quota limit
เราสย่งอลเมล์ลต่ยอวชนไดข้จาส กชด เราเรลยกว่ยา Quota limit แลข้วแตย่ประเภทของ Google Account โดยบชญชล
แบบฟรลสงย่ ได้ข 100 เมลล์ต่ยอวนช
ตรวจสอบ Quota limit ไดด้ข ชงนลชี้
var quotaLimit = MailApp.getRemainingDailyQuota();
Logger.log(quotaLimit);
ปฟัญหามชนจะเกิมด ถ้ขาจาส นวนอลเมลล์ท่ัลชเราจะส่ยงเหลรือนข้อยกวย่า Quota limit ฉะนชี้นให้ขตรวจสอบ Quota
กอย่ น ถ้ขาพอกจส็ งย่ ไมพย่ อกจ็ใหข้ขชึด้ีน Message Box แจขง้
function sendMails() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var templateText = SpreadsheetApp.getActiveSpreadsheet().
getSheetByName("sTemplate").getRange("A1").getValue();
// ตอนตรวจสอบเหลอพ 84 กเ็ก ลยใส่ย -83 เพ่ีพอท ทดสอบ Qouta ไมพ่ย อ - ใชง้ข านจรพิงให้ลข บตรงนั้ทออก
var quotaLeft = MailApp.getRemainingDailyQuota() - 83;
// Logger.log(quotaLeft);
// ถาข้ มท Quota ไมพย่ อใหขข้ ทัน้ข Message Box
if(lr-1 > quotaLeft){
Browser.msgBox("คุคณมดี Quota limit เหลอรื เพดยี ง " + quotaLeft +
" แตว่คคุณกาก ลงวั จะสง่ว อีดเมลจล์ าก นวน " + (lr-1) + " ฉบวบั " +
"ฉะน้ีัวรนอเดี มลจล์ ะไมวถ่ กูม สง่ว ") ;
} /* จบ if */
// ถ้าข Quota พอใหขส้ ย่งอเท มล์ล
else {
for(var i = 2 ; i <= lr ; i++) {
var currentEmail = ss.getRange(i, 1).getValue();
var currentName = ss.getRange(i, 2).getValue();
var currentClass = ss.getRange(i, 3).getValue();
var templateTextReplaced = templateText
.replace("{name}",currentName)
.replace("{class}",currentClass) ;
var subjectLine = "แจข้งคอร์สล ใหมว่ : " + currentClass + " กาก ลัวงจะเปปดิ อบรมเรล็วๆนด้ีร" ;
MailApp.sendEmail(currentEmail, subjectLine, templateTextReplaced) ;
} ; // จบ for
Browser.msgBox("สง่ว อีดเมล์ลไป " + (lr-1) + " ฉบวับ") ;
} ; // จบ for
}
เรยล บเรลยงโดย วสันร ต์ล คณุค ดพิลกเศวต ([email protected]) 25
2.9. พัพฒนาการท่ที 7 – สรา้น งป่ปุม
ท่ัชล Google Sheet ไปทัชล่เมนูม Insert → Drawing จะปรากฎหน้ขาต่ยางให้ขวาดรมูปวาด หรรือ Drawing
Object ใหเ้ข ราสรข้าง Drawing Object ท่ลัจช ะใชข้เป็ปนปปมทุ่ ตวช อย่าย งตามภาพ
ทลช่ั Drawing Object ท่ัชลสราข้ งไป คลมิกทัช่ล ปปคุม่ 3 จุดค → Assign Script ตามภาพ
ทชั่หล น้ขาต่ยาง Assign Script พมมิ พช์ล รืชั่อฟัฟงกชล์ น่ัช ทเัช่ล ราเขลยน Script ลงไป เชย่น sendMails
จากนชี้น เมั่ืรชอเราคลกมิ ทล่ชั Drawing Object ตวช นลชก้ี ็จจะเปป็นการรชนสครมิปตล์
26 เรทยนรกมูน้ ารสรา้น งโปรเจ็จค Google Apps Script เลว่ม 1
บททที่ร 3
โปรเจคจ็ 03
Mail Merge จาก Sheets
โดยใชู้ร HTML Template
3.1. ททีม่ า
Google Sheets Mail Merge - Email - No Addons – Tutorial
https://www.youtube.com/watch?v=h2z13YE3kJg
โปรเจ็จคนีลช้ ส่ยงอลเมล์ลแบบ Mail Merge โดยดดึงข้ขอมมูลอลเมล์ล ช่ัชรือผ้มูขสยง่ และ อชร่ืันๆ มาจากไฟลล์ Google Sheet
โดยเนอ้ีชรื หาของอลเมลมล์ าจาก Template ในไฟล์ล HTML
3.2. พฒัพ นาการท่ีท 1 : เตรทยมพรน้อมไฟล์ล Google Sheets
3.2.ก.) สร้าข งไฟล์ล Google Sheet
เริชัม่มต้ขนให้ขสรข้างไฟล์ล Google Sheet จากนชี้นใส่ยขข้อมมูลชชั่ืรอ นามสกทุล และ เบอรล์โทรศชพท์ล ลงไป ตชวอยย่าง
ข้ขอมมลู ตามภาพ
3.2.ข.) สร้ขางไฟล์ล Google Apps Script
สรา้ข งโปรเจค็จ Google Apps Script แบบฝฟงั กชบไฟลล์ Google Sheet ไว้ข
3.3. พัพฒนาการที่ท 2 : สรา้น ง Template ไฟล์ล HTML
ทลโัช่ ปรเจจค็ Google Apps Script สร้าน งไฟลล์ HTML โดยไปทั่เชล มนมู File → New → HTML
จากนชี้นเขลยนโคข้ด HTML เพ่ืัอรช สรา้ข งเป็นป Template สสาหรชบสงย่ อลเมลล์
28 เรยท นรกนู้ม ารสรน้างโปรเจ็จค Google Apps Script เล่วม 1
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>เรดียนคณุค นภาพร คณคุ ดิลด กเศวต</p>
<p>หมายเลขโทรศวัพทข์ล องคุคณ ทเ่ีทด ราบัวนทกทึ ไวข้ครอื 081-399-6700</p>
<p>กรคุณาตอบกลัวบถ้ขาหากไมใว่ ช่ว</p>
<p>ขอแสดงความนัวบถอืร <br>ระบบสงว่ อีเด มลอล์ วตั โนมวตั ดิ</p>
</body>
</html>
3.4. พฒพั นาการทีท่ 3 : แทรกสคริรปต์ลเตรทยมเรทยกใชฟ้น ฟงั กชล์ นที่พั
ข้ขอความหรรือจดทุ ท่ัลชจะเปลล่ัชยนเป็ปนข้อข มูลม ทชั่ดล ดึงมาจาก Google Sheet เชย่น ช่ีทนอ หรนอ เบอร์ลโทรศพัพทล์ ใหข้เรา
แทรกบลอจ็ ค <? ?> เพชัรอ่ื จะแทรกสครมิปตล์(Script
let) เตรยล มไวขส้ าส หรบช เรยล กใชฟข้ งฟั กช์ล ช่นั จากไฟลล์ Google Apps Script (ไฟล์ล .gs)
โค้ขดในบลจ็อค <? ?> เปป็นสคริมปตล์ทล่ชัรชนในฝ่ัฟฝง Server side แล้ขวคืรนค่ยากลชบมาเป็ปน HTML แล้ขวสย่งต่ยอใหข้
Bowser รบช ไปแสดงผล
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>เรียด นคณคุ <?= fn ?> <?= ln ?></p>
<p>หมายเลขโทรศพัว ทล์ของคณคุ ทเ่ีทด ราบนัว ทกึท ไวข้ครือ <?= phone ?></p>
<p>กรณุค าตอบกลวับถข้าหากไมใ่ว ช่ว</p>
<p>ขอแสดงความนบัว ถอรื <br>ระบบสว่งอเีด มลอ์ล วตั โนมวัติด</p>
</body>
</html>
หมายเหตป
<?= เขยล นตดิม กชน เว้นข แบบนชล้ไี มไย่ ด้ข <? =
เรลยบเรลยงโดย วสัรนตล์ คณุค ดลิพ กเศวต ([email protected]) 29
3.5. พฒพั นาการทท่ี 4 : ดึงด ขอมลูม จาก Google Sheets
3.5.ก.) ดึงท ขอมลมู จาก Google Sheets มา Log ดูม
จบช ข้ขอมมลู ในชีชล้ทกย่อน โดยจบช มาทกุท บรรทดช ทชั่มล ขล ข้อมูมล
function myFunction() {
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataEmail");
var data = ws.getRange("A2:D"+ws.getLastRow()).getValues();
Logger.log(data);
}
ผล
Logs
[ ] [[[email protected], นภาพร, คณคุ ดลิพ กเศวต, 081-111-1111], [[email protected], wasan,
snp, 095-222-2222], [[email protected], PoE, Club, 031-333-3333]]
3.5.ข.) ใชข้ forEach เขข้าไปดทงึ อดเี มลทล์ คกุ บรรทัวดมา Log ดมู
ข้อข มูลม ทจัลช่ ชบมาจาก Google Sheet เราจะใชข้ forEach วนหลูปม เขข้าไปในอาเรย์ล โดยจะดดงึ ขอข้ มมูลมาไดท้ข ลละ
บรรทดช เพราะเปป็นอาเรย์ล 2 มิมติม อย่ยางไรก็ดจ เล ราสามารถจชบขข้อมูมลในคอลชมน์ลทชล่ัต้ของการไดข้โดยระบทุสมาชมิกในแถว
เชนย่ row[2] หมายถดึง คอลมช นลท์ ชั่ล 3(ดรรชนลล สาดบช ทัล่ช 2) ในแถวข้ขอมลมู
function myFunction() {
var email = 0;
var first = 1 ;
var last = 2;
var phone = 3;
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataEmail");
var data = ws.getRange("A2:D"+ws.getLastRow()).getValues();
data.forEach(function(row){
Logger.log(row[email]); // Log สมาชิกพ อาเรยใ์ล นคอลัรมนท์ล ่ีท 1 (ทลท ะแถว)
}); // End – forEach
}
ผล
Logs
[ 01 ] [email protected]
[ 02 ] [email protected]
[ 03 ] [email protected]
30 เรยท นรกนู้ม ารสราน้ งโปรเจ็จค Google Apps Script เล่วม 1
3.6. พฒัพ นาการทีท่ 5 : วนหลมูปสยง่ เมลโ์ล ดยใช้น Template จากไฟลล์ HTML
ขชี้นตอนน้ชลี จะเปน็ป การวนหลปูม เพช่ืัอร สงย่ เมลล์ โดยใชข้ Template จากไฟล์ล HTML
function myFunction() {
var email = 0;
var first = 1 ;
var last = 2;
var phone = 3;
// สรา้ข ง Template จากไฟลล์ HTML ในโปรเจค็ก
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataEmail");
var data = ws.getRange("A2:D"+ws.getLastRow()).getValues();
// วนหลมูปสย่งอเท มลล์
data.forEach(function(row){
emailTemp.fn = row[first] ; // จบรั คาย่ ของ ชอีทพ่ ไปใส่ย
emailTemp.ln = row[last] ; // จบัร คยา่ ของ นามสกุคล ไปใส่ย
emailTemp.phone = row[phone] ; // จบรั คา่ย ของ เบอรโล์ ทร ไปใส่ย
// จบรั เนอท้พั หาในไฟลล์ HTML ทเ่ที ปนป็ Template
var htmlMessage = emailTemp.evaluate().getContent();
// Logger.log(htmlMessage); // --------------- ดูตม อ่ย ททผี่ ลการ Logs
GmailApp.sendEmail(
row[email] ,
"สกาควญั " ,
"อเีด มลข์ล องคคุณไมส่ว นับว สนคุน HTML" ,
{name : "Email App", htmlBody:htmlMessage}
); // End – sendMail
}); // End - forEach
}
ผล – อเล มลลถ์ กูม ส่งย ออกไป ผม้รขู บช ไดร้ข บช อลเมล์ลล กช ษณะตามภาพ
เรยล บเรลยงโดย วสัรนตล์ คณคุ ดลิพ กเศวต ([email protected]) 31
หาก Log ดคมู ยา่ ของตวช แปร htmlMessage จะไดผ้ข ลดชงตย่อไปนชี้ล
[ 01 ]
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>เรยท นคณุค นภาพร คคุณดิพลกเศวต</p>
<p>หมายเลขโทรศรัพทข์ล องคณคุ ททเ่ี ราบรันทกข ไว้คข อพ 081-111-1111</p>
<p>กรุณค าตอบกลบัร ถาข้ หากไมย่ใชย่</p>
<p>ขอแสดงความนบรั ถพอ<br>ระบบสยง่ อเท มลลอ์ รัตโนมัตร พิ</p>
</body>
</html>
[ 02 ]
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>เรทยนคคุณ wasan snp</p>
<p>หมายเลขโทรศพัร ท์ลของคณคุ ททีเ่ ราบรันทกข ไวข้คอพ 095-222-2222</p>
<p>กรณคุ าตอบกลบัร ถข้าหากไม่ใย ชย่</p>
<p>ขอแสดงความนบรั ถพอ<br>ระบบสย่งอทเมลล์อรตั โนมรัติพ</p>
</body>
</html>
[ 03 ]
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>เรทยนคณุค PoE Club</p>
<p>หมายเลขโทรศพัร ท์ลของคณุค ทที่เราบรันทกข ไวข้คอพ 031-333-3333</p>
<p>กรคณุ าตอบกลบัร ถข้าหากไมย่ใช่ย</p>
<p>ขอแสดงความนบัร ถอพ <br>ระบบสงย่ อทเมลลอ์ ัรตโนมรัติพ</p>
</body>
</html>
32 เรทยนรกมู้น ารสราน้ งโปรเจ็จค Google Apps Script เลว่ม 1
3.7. พฒัพ นาการที่ท 6 : สรา้น งปปุม่ เพ่อีทน รนัพ สครริปตล์
สราข้ งป่มปุท เพั่ชรือรชนสคริมปตล์ โดยสรา้ข งจาก Drawing Object แลวข้ Assign ชั่อืรช ฟงัฟ ก์ลช่ชันลงไป
ไปทลชั่ Insert → Drawing
ทช่ลั Drawing object ทสาการ Assign script โดย คลดิกทที่ดปุ่ปคม 3 จุคด → Assign script จะปรากฎหน้ขาต่ยาง
มาให้ข พมิร พล์ช่นีอท ของฟงัฟ กลช์ นพ่ีัท ท่ีทจะผมูกกับพ Drawing Object
จากน้ไีชล ป เวลาจะรนช สครมิปต์ลเพชอ่ัืร สงย่ อเล มล์ล ใหข้คลิกม ทัล่ช Drawing Object ไดข้เลย
เรยล บเรยล งโดย วสรันต์ล คณุค ดพลิ กเศวต ([email protected]) 33
3.8. พพฒั นาการทีท่ 7 : ฝาก Subject และ Name ไวน้ในชนืท้ททท่ี 2
ในขีช้นตอนน้ชีล เราจะฝาก Subject และ Name(ผ้ขมูส่ยง) ไว้ขในชีช้ลทท่ัลช 2 (ชี้ดรทชรืที่อ Settings) ตชวอย่ยางตามภาพ
เพัรอ่ชื ทชัจ่ล ะไดขแ้ ก้ขไขหวช ขอข้ การสง่ย ไดง้ข ่ยาย
function myFunction() {
var email = 0;
var first = 1 ;
var last = 2;
var phone = 3;
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataEmail");
var wsSettings = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings");
// จบรั ค่ยาในเซลลล์ ในชทั้ททท่ี 2
var name = wsSettings.getRange("B2").getValue();
var subject = wsSettings.getRange("B1").getValue();
var data = ws.getRange("A2:D"+ws.getLastRow()).getValues();
data.forEach(function(row){
emailTemp.fn = row[first] ; // จบรั คย่าของ ชอี่ทพ ไปใส่ย
emailTemp.ln = row[last] ; // จบัร คย่าของ นามสกลุค ไปใสย่
emailTemp.phone = row[phone] ; // จบัร คา่ย ของ เบอรโ์ล ทร ไปใส่ย
// จรบั เนอ้ัพท หาในไฟลล์ HTML ทท่เี ปนป็ Template
var htmlMessage = emailTemp.evaluate().getContent();
// Logger.log(htmlMessage); // --------------- ดมูตอย่ ทท่ีผลการ Logs
GmailApp.sendEmail(
row[email] ,
subject ,
"อเดี มลขล์ องคณุค ไมส่ว นบวั สนนุค HTML" ,
{name : name, htmlBody:htmlMessage}
); // End – sendMail
}); // End - forEach
}
34 เรยท นรกมู้น ารสรา้น งโปรเจจ็ค Google Apps Script เลว่ม 1
หลชงจากส่งย อเล มลไล์ ปแลว้ข ผรขมู้ บช ไดร้ข ชบอเล มลลด์ ชงต่อย ไปนชล้ี
3.9. พฒัพ นาการทที่ 8 : สง่ย ใครบ้นาง
ขชี้นตอนนชลี้ เราใชข้ Checkbox เพชร่ัือกไหนดวา่ย จะส่ยงเมลใ์ล หใข้ ครหรรือไม่สย ง่ย ใหใข้ ครบา้ข ง
ในคอลชมนล์ Send ? ใสย่ Chenckbox ลงไป โดยเลอืร กเซลลล์ แลข้วไปทัช่ล Insert → Checkbox
Checkbox เป็นป บูลม ลนล มลคยา่ เปป็น true (Check) กชล false (Uncheck)
ถดช มาเราจะเพมมิชั่ โคขด้ โดยจะสย่งอลเมลลเ์ ฉพาะ Checkbox ท่ลชัถมูก Check เทย่านีน้ช
เราจะเพม่มิชั บรรทชดน้ีลเช ขข้าไป
// สง่ย เมลเ์ล ฉพาะบรรทดัร Checkbox ถกูม Check
data = data.filter(function(r){ return r[4] == true});
เรยล บเรลยงโดย วสันร ตล์ คณุค ดพิลกเศวต ([email protected]) 35
function myFunction() {
var email = 0;
var first = 1 ;
var last = 2;
var phone = 3;
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataEmail");
var wsSettings = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings");
var name = wsSettings.getRange("B2").getValue();
var subject = wsSettings.getRange("B1").getValue();
var data = ws.getRange("A2:D"+ws.getLastRow()).getValues();
// สงย่ เมลเ์ล ฉพาะบรรทดรั Checkbox ถกูม Check
data = data.filter(function(r){ return r[4] == true});
// Logger.log(data); // --------------- ดตมู อย่ ท่ทีผลการ Logs
data.forEach(function(row){
emailTemp.fn = row[first] ; // จบัร ค่ยาของ ชอ่ทีพ ไปใสย่
emailTemp.ln = row[last] ; // จบรั คา่ย ของ นามสกุลค ไปใส่ย
emailTemp.phone = row[phone] ; // จบรั ค่ยาของ เบอรลโ์ ทร ไปใส่ย
// จัรบเนอทั้พ หาในไฟล์ล HTML ทีท่เปนป็ Template
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(
row[email] ,
subject ,
"อเีด มลขล์ องคณคุ ไม่สว นบวั สนนคุ HTML" ,
{name : name, htmlBody:htmlMessage}
); // End – sendMail
}); // End - forEach
}
หาก Log ดมูข้ขอมมูลทัช่ลจชบมาไดข้ ทชั่ลกรองแล้ขว กย่อนสย่งอลเมลล์ จะเห็จนวย่า เหลรือเฉพาะบรรทชด Checkbox ถมูก
Check เท่าย นชน้ี
[ 01 ] [[[email protected], wasan, snp, 095-222-2222, true]]
36 เรทยนรกน้มู ารสรน้างโปรเจจ็ค Google Apps Script เล่วม 1
3.10. พัพฒนาการทที่ 9 : เคร่อทีน งมนอช่ยวยสร้าน งโค้นด HTML
ไปทล่ชัเวจ็บ https://www.tiny.cloud/features (ทชัลห่ นาข้ แรกของเว็จบเลรือกเมนูม TinyMCE) มลเครรืชอ่ั งมรือชย่วย
สร้ขางหนข้าเวจ็บ จากการพิมมพล์ขข้อความ จชดรูมปแบบ สรข้างลมิงคล์ แบบ WYSIWUG จากนช้ีนระบบจะสรข้างเปป็นโคข้ด
HTML ให้ข
คลิดกททีด่ปุคป่ม 3 จุดค → Source Code เพัืชร่อดมู Source Code
เรลยบเรยล งโดย วสนัร ตล์ คณุค ดลพิ กเศวต ([email protected]) 37
38 เรยท นรกน้มู ารสรน้างโปรเจ็จค Google Apps Script เล่วม 1
บทททีร่ 4
โปรเจจค็ 04
สง่ส อเรี มลข์ล อบคคณุ
เมมที่อกรอกแบบฟอร์มล
4.1. ท่ีมท า
Google Forms - Email Notification Script - Send Confirmation Emails to Users
https://www.youtube.com/watch?v=H7WFkt6J4rs&t=15s
โปรเจจ็คนล้ชี จะส่ยงอลเมลล์ยรืนยชนกลชบไปยชงผ้ขูมกรอกแบบฟอรล์ม ใน Google Form โดยอลเมลล์ทั่ชลส่ยงไปจะใช้ข
Template จากไฟล์ล HTML ทลัชเ่ ราสราข้ งเอง
4.2. เตรทยมพรน้อม
4.2.ก.) สร้าข ง From
สรา้ข ง Form ตามภาพ มกล ารเก็จบอเล มล์ล ชอชื่ัร ผู้ขมตอบแบบฟอรม์ล และ รหสช ไปรษณยล ์ล
40 เรทยนรก้มูน ารสราน้ งโปรเจจ็ค Google Apps Script เล่วม 1
ฟฟิลดล์แรกหรรือช่ยองแรก ก็จคืรอ Email address เปป็นการเปฟิดใชข้งานการเก็จบอลเมลล์ สามารถเปิฟดใช้ขงาน
ฟลิฟ ดล์(หรืรอ Item) น้ลีชไดโข้ ดย คลิดกทปีทด่ ุคป่มเฟอฟื ง จะปรากฎหนข้าตยา่ ง Settings ตามภาพ จากนนีช้ ตก๊ิตด ทีท่ด Collect email
addresses
4.2.ข.) สรขา้ งโปรเจ็ลค Google Apps Script สกาหรบวั Form
สราข้ งโปรเจค็จ Google Apps Script แบบฝฟงั กชบไฟล์ล Google Form
ทัห่ชล นข้า Edit Form (สรข้างหรือร แกไข้ ขฟอร์มล ) คลกิด ทดีท่ปคุป่ม 3 จดคุ → Script Editor จะเขา้ข สมูย่หนา้ข การสร้าข งโปร
เจจ็ค Google Apps Script สาส หรชบ Form
เรลยบเรยล งโดย วสนรั ต์ล คณคุ ดลพิ กเศวต ([email protected]) 41
4.2.ค.) สร้าข งไฟลล์ email.html ในโปรเจล็ค Google Apps Script
ทลชั่หนข้าโปรเจจ็ค Google Apps Script สร้ขางไฟลล์ email.html เพมช่ัิมเตมิม โดยไปทชลั่ New → HTML โดยไฟล์ล
นชี้ล เราจะใช้ขเปนป็ Template ในการสยง่ อเล มล์ล
เท่ยานชล้ี เรากพจ็ รอ้ข มเขยล นโคดข้ ตา่ย งๆแลวข้
4.3. พพัฒนาการทีท่ 1 : ทดสอบส่ยงอเท มล์จล าก Tempalte
ไฟล์ล email.html - สราข้ งเนีอช้รื ทั่จชล ะใช้เข ปนป็ Template ในการสง่ย อเล มล์ล อยยา่ งครย่าวๆ
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p>ขอบคุณค หรบวั การกรอกแบบฟอรมล์ </p>
<p>ขอแสดงความนวับถือร <br>
ทมดี งาน PoE Club
</p>
</body>
</html>
42 เรยท นรกมนู้ ารสราน้ งโปรเจจ็ค Google Apps Script เลว่ม 1
ไฟลล์ Code.gs - เขยล นโคดข้ เพอชร่ืั ส่ยงอเล มลล์
function sendEmail() {
var html = HtmlService.createTemplateFromFile("email") ;
// Logger.log(typeof html); // object
// Logger.log(html); // {}
var htmlText = html.evaluate().getContent() ;
// Logger.log(typeof htmlText); // string
// Logger.log(htmlText); // โคด้ข HTML
var emailTo = "[email protected]" ; // ทดสอบส่ยงไปกอย่ น
var subject = "ขอบคณคุ สกาหรัวบการตอบแบบสอบถาม" ;
var textBody = "เมลฉล์ บบัว นีรต้ด ้ของการ HTML Support
โปรดทกาใหแข้ นใว่ จว่าว คุคณได้ขเปิดป การสนวับสนนุค น้รีดใหก้ข ับว ยสมู เซอร์ล" ;
var options = { htmlBody: htmlText } ;
// ผขรู้ม บัร , ชพอ่ีท อเท มล์ล, เน้อทัพ หา, ออก๊ พชีทัรน่ พเิพ ศษ
GmailApp.sendEmail(emailTo, subject, textBody, options) ;
}
ผล หลชงรนช ฟัฟงกชล์ ชน่ั sendEmail
ผข้รมู ชบไดรข้ ชบอลเมล์ลตามภาพ เนืชีรอ้ หาเปปน็ Template ทัชล่มาจากไฟล์ล email.html
เรลยบเรยล งโดย วสนรั ตล์ คณุค ดพลิ กเศวต ([email protected]) 43
4.4. พฒัพ นาการที่ท 2 : รบัพ คย่าจาก Form submit
ไฟลล์ Code.gs - เขลยนโคข้ดเพ่มิมัช เติมม เพั่ชรอื ส่งย Agrument e ใหฟ้ข งัฟ ก์ชล น่ัช เพชั่อืร นสาไปใช้ขในการสย่งอเล มล์ล
function sendEmail(e) {
var html = HtmlService.createTemplateFromFile("email") ;
var htmlText = html.evaluate().getContent() ;
Logger.log(typeof e); // พิดมพ์ล : object
Logger.log(e); // พมิด พล์ : [object Object]
var emailTo = e.response.getRespondentEmail();
Logger.log(emailTo); // พดิมพ์อล ดีเมลล์ เชว่น [email protected]
var subject = "ขอบคคุณสาก หรัวบการตอบแบบสอบถาม" ;
var textBody = "เมลฉ์ล บวับนตีดร้ ขอ้ งการ HTML Support
โปรดทาก ใหข้แนใว่ จว่าว คณคุ ไดเ้ข ปปิดการสนบวั สนุนค นใ้ดีร หก้ข ัวบยูสม เซอรล์" ;
var options = { htmlBody: htmlText } ;
if(emailTo !== undefined){
GmailApp.sendEmail(emailTo, subject, textBody, options) ;
}
}
โคดข้ ข้าข งตน้ข ถข้ารนช ปกตมโิ ดยการ <Ctrl><R> จะ Error เพราะ Argrument e ทช่ัลสยง่ ใหขฟ้ งัฟ กชล์ ช่ันเปป็น
undefined (ไมยม่ อล ะไรสย่งมา)
Argrument e ทช่ลัจะส่ยงไปในฟฟังกล์ชัช่น sendEmail() เตรลยมไวข้สาส หรชบ Trigger ทลชั่จะสช่ังรชนฟัฟงกล์ชช่ันเมชั่รือมล
Event เกดมิ ขชีด้นึ ในทัลน่ช ีกลช้ คจ็ อืร Event(เหตกทุ ารณล์) Form Submit (คลดกิ ป่ปคุม Submit เพท่อืีร ส่งว แบบฟอรมล์ )
เมัืรช่อมล Event Form Submit จะกระตทุ้ขนให้ขรชนฟัฟงกล์ชช่ัน แต่ยตข้องไปสร้ขาง Trigger ก่ยอน ( ดมูเพทิรี่มเตริมข้นอ
4.5 พพฒั นาการทที่ 3 : สรนา้ ง Trigger เพทีอ่น รนัพ ฟงฟั ก์ลชีทนพั่ ตาม Event หนนา้ 45 )
เมชัือร่ มล Event Form Submit ฟอรม์ล จะสงย่ ผา่ย นวพตั ถปหรนอคลาส FromResponse มาด้วน ย ซ่งึดชั กจค็ รือ
Argrument e ทจล่ัช ะถกูม ส่ยงใหข้กชบฟฟังกช์ล ่ันช sendEmail เพอชัร่ื นสาไปประมวลผลตย่อ
วตช ถุท FromResponse มล Keys อะไรบข้างดมไู ดจข้ ากลมงิ คนล์ ช้ีล
( https://developers.google.com/apps-script/guides/triggers/events#google_forms_events )
( https://developers.google.com/apps-script/reference/forms/form-response )
บรรทดช
var emailTo = e.response.getRespondentEmail();
ใชจ้ข บช อลเมลทล์ ล่ชักรอกลงในแบบฟอรลม์ ค่ยาทค่ลัช นรื กลชบมาเป็ปนอลเมลล์ เชย่น [email protected]
44 เรยท นรกนู้ม ารสรา้น งโปรเจ็จค Google Apps Script เล่วม 1
4.5. พฒพั นาการทีท่ 3 : สรนา้ ง Trigger เพีทน่อรพนั ฟฟังกชล์ ัี่ทพนตาม Event
ในข้ีชนตอนนชีล้ จะเปปน็ การสรา้ข ง Trigger (ตวช กระตนุ้ทข ) เพืชรั่อรชนฟังฟ กชล์ ชัน่ ตาม Event
ทหลชั่ นาข้ โปรเจค็จ Google Apps Script ไปทลัช่เมนมู Edit → Current Project’s Triggers จะเขาข้ ส่ยูหม นข้า
Triggers ตามภาพ
สราข้ ง Trigger โดยคลิมกทช่ลัปุ่ปมค Add Trigger จะปรากฎหน้ขาตา่ย งมาใหต้ข ้ีชงคา่ย Trigger ในการรชนโค้ขด
ชย่อง Choose which fuction to run
ใชขเ้ ลืรอกฟงัฟ กชล์ ่ัชนในโปรเจ็คจ ท่จลชั ะรนช
ชย่อง Select event source
ใช้ขเลือร กวา่ย แหลย่งของ Event จะมาจากไหน ในทนลช่ั ชลเี้ ลรอื ก Form กค็จ รอื มาจาก From
ชอย่ ง Select event type
ใช้ขเลืรอก Event ในทชั่ลนชล้ีเลืรอก On form submit ก็จคืรอ เมัชรื่อคลมิกทช่ลัปปทุ่ม Submit เพืชร่ัอสย่งคสาตอบในการรอก
แบบฟอรมล์
เรลยบเรยล งโดย วสนรั ต์ล คณคุ ดพิลกเศวต ([email protected]) 45
เมั่อชืร Save แล้วข จะไดข้ Trigger ตามภาพ
46 เรยท นรกนูม้ ารสร้นางโปรเจจ็ค Google Apps Script เล่วม 1
4.6. ทดสอบกรอกแบบฟอรล์ม
เม่ชรัือกรอกแบบฟอรล์ม จากนชี้นคลมิกทั่ลชปปุ่ทม SUBMIT จะไปรชนฟฟังก์ลชช่ัน sendEmail ซึชัด่งจะมลการส่ยงอลเมลล์ไปยชง
อลเมลท์ล ั่กลช รอกลงในชย่อง Email address
ผขูม้กรอกแบบฟอรล์มจะไดรข้ ชบอลเมล์ล ตวช อยา่ย งดงช ต่อย ไปนลีช้
เรลยบเรลยงโดย วสนัร ตล์ คณคุ ดลิพ กเศวต ([email protected]) 47
48 เรยท นรกน้มู ารสรน้างโปรเจ็จค Google Apps Script เล่วม 1
บทที่ทร 5
โปรเจจ็ค 05
สรู้าร งชู้รอยสใ์ล หูร้ Dropdown
ใน Form จากขอรู้ มลร
ใน Google Sheet
5.1. ทีทม่ า
Google Forms - Drop Down List from Spreadsheet Using Apps Script ***
https://www.youtube.com/watch?v=o3AL7ASI_cA
Apps Script: Dynamic Forms Multiple Choice
https://www.youtube.com/watch?v=MPlT_sIwL6k
สร้ขางและอชพเดทช้ขอยสล์ให้ขกชบ Item หรืรอ คสาถาม ทั่ชลเป็ปน Dropdown โดยจชบข้ขอมูมลจากใน Google
Sheet มาใชขเ้ ป็นป ชขอ้ ยส์ล
5.2. เตรทยมพร้นอม
สรขา้ ง Form ดงช ตอ่ย ไปนีลช้ - มล Item ท่ัเลช ป็นป Dropdown ตามภาพ
สรขา้ งไฟล์ล Google Sheet - พมิม พลข์ อข้ มลูม ลงไป
และทชไ่ลั ฟล์ล Google Sheet ไฟลนล์ ชี้ล สรนา้ งโปรเจจ็ค Google Apps Script แบบฝฟงั ในไฟลล์ (ไปท่ัลชเมนมู
Tools → Script Editor)
50 เรทยนรกน้มู ารสรน้างโปรเจจ็ค Google Apps Script เลว่ม 1