เคยไหมคะ? ที่ต้องเสียเวลาครึ่งวันไปกับการพิมพ์สรุปการประชุม จัดหน้ากระดาษ แล้วต้องมาคอยส่งอีเมลหาผู้เข้าร่วมทีละคน วันนี้เราจะมาเปลี่ยนงานซ้ำซากเหล่านี้ให้เป็นระบบอัตโนมัติ (Automation) ที่ทำงานแทนคุณได้ภายในไม่กี่วินาที ด้วย Google Apps Script ค่ะ
🎯 ระบบนี้ทำอะไรได้บ้าง?
- เก็บข้อมูลเป็นระบบ: กรอกวาระและมติผ่าน Google Forms หรือ Sheets
- สร้างเอกสารอัตโนมัติ: ระบบจะดึงข้อมูลไปใส่ใน Template (Google Docs) และแปลงเป็น PDF ให้ทันที
- แจ้งเตือนทันใจ: ส่งสรุปการประชุมทาง Email ให้ผู้เกี่ยวข้องอัตโนมัติ
🛠️ สิ่งที่ต้องเตรียม (Prerequisites)
- Google Sheet: สำหรับเก็บข้อมูล (Database)
- Google Doc: สำหรับทำเป็นแบบฟอร์มบันทึกการประชุม (Template)
- Google Drive Folder: สำหรับเก็บไฟล์ที่สร้างเสร็จแล้ว
🚀 ขั้นตอนการสร้างระบบ (Step-by-Step)
1. สร้างฐานข้อมูล (Google Sheet)
สร้าง Sheet ขึ้นมา และกำหนดหัวข้อคอลัมน์แถวแรก เช่น
- Column A: วันที่ประชุม
- Column B: หัวข้อการประชุม
- Column C: รายชื่อผู้เข้าประชุม
- Column D: สรุปมติที่ประชุม
- Column E: อีเมลผู้รับ (คั่นด้วย comma หากมีหลายคน)
- Column F: สถานะ (เอาไว้ให้ระบบติ๊กว่่า “ส่งแล้ว”)
2. สร้างเทมเพลต (Google Doc)
สร้างไฟล์ Google Doc จัดรูปแบบให้สวยงาม ตรงไหนที่อยากให้ระบบดึงข้อมูลมาใส่ ให้ใส่เครื่องหมายปีกกา 2 ชั้นครอบไว้ เช่น {{Date}}, {{Topic}}, {{Resolution}}
3. พระเอกของเรา: Google Apps Script
ไปที่ Google Sheet ของเรา กดที่เมนู ส่วนขยาย (Extensions) > Apps Script แล้วลบโค้ดเก่าออก วางโค้ดนี้ลงไปนะคะ:
JavaScript
function createMeetingMinutes() {
// 1. ตั้งค่า ID ของไฟล์และโฟลเดอร์
const TEMPLATE_ID = 'ใส่_ID_ของไฟล์_Google_Doc_Template_ที่นี่';
const FOLDER_ID = 'ใส่_ID_ของ_Folder_ที่ต้องการเก็บไฟล์';
// 2. เชื่อมต่อกับ Sheet ที่ใช้งานอยู่
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const rows = sheet.getDataRange().getValues();
// เริ่มวนลูปตรวจสอบข้อมูลตั้งแต่แถวที่ 2 (ไม่เอาหัวตาราง)
rows.forEach((row, index) => {
if (index === 0) return; // ข้ามหัวตาราง
if (row[5] === 'Sent') return; // ถ้าส่งแล้วให้ข้ามไป
// ดึงข้อมูลจากแต่ละคอลัมน์ (Array เริ่มนับที่ 0)
const date = Utilities.formatDate(new Date(row[0]), "GMT+7", "dd/MM/yyyy");
const topic = row[1];
const attendees = row[2];
const resolution = row[3];
const emailTo = row[4];
// 3. ทำสำเนา Template และแทนที่ข้อความ
const folder = DriveApp.getFolderById(FOLDER_ID);
const docFile = DriveApp.getFileById(TEMPLATE_ID).makeCopy(`รายงานการประชุม_${topic}`, folder);
const doc = DocumentApp.openById(docFile.getId());
const body = doc.getBody();
// แทนที่ Placeholder {{...}} ด้วยข้อมูลจริง
body.replaceText('{{Date}}', date);
body.replaceText('{{Topic}}', topic);
body.replaceText('{{Attendees}}', attendees);
body.replaceText('{{Resolution}}', resolution);
doc.saveAndClose(); // บันทึกและปิดไฟล์ Doc
// 4. แปลงเป็น PDF (Optional)
const pdfBlob = docFile.getAs(MimeType.PDF);
const pdfFile = folder.createFile(pdfBlob);
// 5. ส่งอีเมลพร้อมแนบไฟล์
if (emailTo) {
MailApp.sendEmail({
to: emailTo,
subject: `สรุปการประชุม: ${topic}`,
body: `เรียน ผู้เกี่ยวข้อง,\n\nขอส่งสรุปรายงานการประชุม "${topic}" ประจำวันที่ ${date} \n\nรายละเอียดตามไฟล์แนบ`,
attachments: [pdfBlob]
});
}
// 6. อัปเดตสถานะใน Sheet ว่าส่งแล้ว
sheet.getRange(index + 1, 6).setValue('Sent');
// (ทางเลือก) ลบไฟล์ Doc ชั่วคราวทิ้ง เหลือไว้แค่ PDF
// docFile.setTrashed(true);
});
}
วิธีหา ID: เปิดไฟล์ Doc หรือ Folder ดูที่ URL จะมีชุดตัวอักษรยาวๆ หลัง
/d/หรือ/folders/นั่นคือ ID ค่ะ
💡 วิธีใช้งานจริง
- เมื่อประชุมเสร็จ ให้กรอกข้อมูลสรุปลงใน Google Sheet
- ไปที่หน้า Apps Script กด Run (เรียกใช้) ฟังก์ชัน
createMeetingMinutes - Pro Tip: คุณสามารถสร้างปุ่ม (Drawing) ใน Google Sheet แล้ว Assign Script ให้กดปุ่มเพื่อรันระบบได้เลย โดยไม่ต้องเปิดหน้าโค้ดค่ะ!
✨ ประโยชน์ที่จะได้รับ
- ลดความผิดพลาด: รูปแบบเอกสารจะเป็นมาตรฐานเดียวกันทุกครั้ง
- ประหยัดเวลา: จากที่เคยใช้เวลาจัดหน้ากระดาษ 30 นาที เหลือเพียง 3 วินาที
- ดูเป็นมืออาชีพ: การส่งสรุปที่รวดเร็วและเป็นระบบ สร้างความประทับใจให้ทีมงาน
ระบบนี้สามารถนำไปต่อยอดได้อีกมาก เช่น การส่งแจ้งเตือนเข้า LINE Messaging API หรือการดึงรายชื่อผู้เข้าประชุมจาก Google Calendar หากคุณเริ่มทำวันนี้ งานเอกสารของคุณในปีหน้าจะเบาลงอย่างแน่นอนค่ะ!



