งานวิชาการ · เริ่มก่อน

ระบบสร้างเกียรติบัตรอัตโนมัติ

กรอกข้อมูลใน Sheets แล้วสร้าง PDF จำนวนมากได้ในครั้งเดียว

เวลาสร้าง/อบรม: 1-2 ชม.
ความยาก: ง่าย

🎯 ผลลัพธ์และประโยชน์ที่ครูจะได้รับ

ลดเวลาทำเกียรติบัตรจากงานมือซ้ำ ๆ เป็นขั้นตอนตรวจชื่อและกดสร้างไฟล์

🛠️ เครื่องมือที่ใช้งานในระบบนี้

Google SheetsGoogle SlidesApps ScriptDrive

⚠️ ข้อควรระวังและข้อสังเกต

เหมาะกับข้อมูลที่ไม่อ่อนไหว เช่น ชื่อ-นามสกุลและกิจกรรม

📊 ขั้นตอนการทำงานของระบบ (Workflow)

  1. 1

    เตรียมรายชื่อ

  2. 2

    ออกแบบ template

  3. 3

    ผูก placeholder

  4. 4

    สร้าง PDF

  5. 5

    เก็บไฟล์ใน Drive

Google Apps Script Code.js
/**
 * ระบบสร้างเกียรติบัตรอัตโนมัติ (Automated Certificate Generator)
 * พัฒนาโดย AKADEMOS (Stay Curious, Stay Inspired)
 */
const CONFIG = {
  TEMPLATE_SLIDE_ID: "1XYxX114QZbEkGOQtfwzrKegJUm5ri3mpdygcWQMdPFQ",
  FOLDER_ID: "1rg5oywKUvt7oWc6rpygbgMnmk_69aXbq",
  SHEET_NAME: "รายชื่อ",
  EMAIL_SUBJECT: "เกียรติบัตรจากการเข้าร่วมกิจกรรมของคุณ",
  EMAIL_BODY: "สวัสดีครับ/ค่ะ\n\nยินดีด้วยที่คุณได้รับเกียรติบัตรจากการเข้าร่วมกิจกรรม ระบบได้สร้างและแนบเกียรติบัตร PDF ของคุณมาพร้อมกับอีเมลฉบับนี้แล้ว\n\nขอแสดงความนับถือ\nทีมงานจัดกิจกรรม",
  SEND_EMAIL: false
};

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("🎓 ระบบเกียรติบัตร")
    .addItem("▶️ เริ่มสร้างเกียรติบัตร", "generateCertificates")
    .addToUi();
}

function generateCertificates() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONFIG.SHEET_NAME);
  if (!sheet) {
    SpreadsheetApp.getUi().alert(`ไม่พบแผ่นงานชื่อ "${CONFIG.SHEET_NAME}"`);
    return;
  }
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return;
  const range = sheet.getRange(2, 1, lastRow - 1, 6);
  const values = range.getValues();
  
  let templateFile, targetFolder;
  try {
    templateFile = DriveApp.getFileById(CONFIG.TEMPLATE_SLIDE_ID);
    targetFolder = DriveApp.getFolderById(CONFIG.FOLDER_ID);
  } catch(e) {
    SpreadsheetApp.getUi().alert("กรุณาตรวจสอบ TEMPLATE_SLIDE_ID และ FOLDER_ID");
    return;
  }

  for (let i = 0; i < values.length; i++) {
    const rowNum = i + 2;
    const name = values[i][0].toString().trim();
    const activity = values[i][1].toString().trim();
    const dateVal = values[i][2];
    const email = values[i][3].toString().trim();
    const status = values[i][4].toString().trim();

    if (!name || status === "สำเร็จ") continue;

    let dateStr = dateVal instanceof Date ? Utilities.formatDate(dateVal, Session.getScriptTimeZone(), "d MMMM yyyy") : dateVal.toString();

    try {
      const newFile = templateFile.makeCopy(`Temp_${name}`, targetFolder);
      const newSlideId = newFile.getId();
      const presentation = SlidesApp.openById(newSlideId);
      
      presentation.replaceAllText("{{name}}", name);
      presentation.replaceAllText("{{activity}}", activity);
      presentation.replaceAllText("{{date}}", dateStr);
      presentation.saveAndClose();

      const pdfBlob = newFile.getAs(MimeType.PDF).setName(`เกียรติบัตร_${name}.pdf`);
      const pdfFile = targetFolder.createFile(pdfBlob);
      newFile.setTrashed(true);

      sheet.getRange(rowNum, 5).setValue("สำเร็จ");
      sheet.getRange(rowNum, 6).setValue(pdfFile.getUrl());
    } catch (error) {}
  }
}

📖 คู่มือการติดตั้งและใช้งานจริง (5 ขั้นตอน)

1

คัดลอกไฟล์ Google Sheets เทมเพลต และ Google Slides เทมเพลต ไปยังบัญชี Drive ของตนเอง

2

นำข้อมูลรายชื่อผู้เข้าอบรมไปใส่ใน Google Sheets ในชีตชื่อ 'รายชื่อ'

3

แก้ไข ID สไลด์เทมเพลตและโฟลเดอร์เก็บไฟล์ในตัวแปร CONFIG ของ Apps Script (ระบบใส่ค่าเริ่มต้นของบัญชีผู้รับงานให้แล้ว)

4

คลิกที่เมนู 'ระบบเกียรติบัตร' ด้านบนของ Google Sheets แล้วกด 'เริ่มสร้างเกียรติบัตร'

5

ระบบจะสร้าง PDF และบันทึกลิงก์เข้า Google Sheets อัตโนมัติ