✅ เป้าหมาย
- บันทึกข้อมูลลง Google Sheet
- แชร์ไฟล์ Spreadsheet ให้กับอีเมลของผู้สมัคร
- ส่งอีเมลยืนยันพร้อมที่อยู่ของไฟล์ (Link)
Code.gs
function doGet() { return HtmlService.createHtmlOutputFromFile('index') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } function submitForm(formData) { const membersSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Members"); //ไอดีของไฟล์ที่ต้องการแชร์ const fileSharingID = "xxxxxxxxxxx"; // บันทึกข้อมูลลงชีต membersSheet.appendRow([ new Date(), formData.fullname, formData.email, formData.affiliate, formData.company ]); // แชร์ไฟล์ให้กับผู้สมัคร const file = DriveApp.getFileById(fileSharingID); file.addViewer(formData.email); // ส่งอีเมลแจ้งไปยังผู้สมัคร const subject = "ลงทะเบียนรับไฟล์สำเร็จ"; const body = ` สวัสดีคุณ ${formData.fullname}, คุณได้ลงทะเบียนสำเร็จในระบบสมาชิกของเราเรียบร้อยแล้ว ชื่อบริษัทของคุณ: ${formData.company} อีเมลของคุณ: ${formData.email} สังกัดของคุณ: ${formData.affiliate} คุณสามารถเข้าถึงไฟล์ได้ที่ลิงก์นี้: ${file.getUrl()} หากคุณต้องการแก้ไขไฟล์ โปรดเลือกเมนู "ไฟล์ > สร้างสำเนา" เพื่อทำสำเนาเป็นของคุณเอง หากคุณไม่ได้สมัคร กรุณาเพิกเฉยต่ออีเมลฉบับนี้ ขอแสดงความนับถือ ครูเชียร `; GmailApp.sendEmail(formData.email, subject, body); return { success: true, message: "ลงทะเบียนสำเร็จและส่งอีเมลเรียบร้อยแล้ว!" }; }
index.html
<html lang="th"> <head> <meta charset="UTF-8"> <title>ลงทะเบียนรับไฟล์</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap 5.3.3 CDN --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body class="bg-light"> <div class="container d-flex justify-content-center align-items-center vh-100"> <div class="card shadow rounded-4 p-4 w-100" style="max-width: 500px;"> <h3 class="text-center mb-4">ลงทะเบียนรับไฟล์</h3> <form id="registerForm"> <div class="mb-3"> <label for="fullname" class="form-label">ชื่อ นามสกุล</label> <input type="text" class="form-control" id="fullname" name="fullname" required> </div> <div class="mb-3"> <label for="email" class="form-label">อีเมล</label> <input type="email" class="form-control" id="email" name="email" required> </div> <div class="mb-3"> <label for="company" class="form-label">ชื่อหน่วยงาน</label> <input type="text" class="form-control" id="company" name="company" required> </div> <div class="mb-3"> <label for="affiliate" class="form-label">สังกัด</label> <input type="text" class="form-control" id="affiliate" name="affiliate" required> </div> <div class="d-grid"> <button type="submit" class="btn btn-primary">ลงทะเบียน</button> </div> <!-- Response Message --> <div id="result" class="mt-3 text-center"></div> <!-- Loading Spinner --> <div id="loading" class="d-none text-center mt-3"> <div class="spinner-border text-primary" role="status"> <span class="visually-hidden">กำลังโหลด...</span> </div> <div class="mt-2">กำลังตรวจสอบข้อมูล...</div> </div> </form> </div> </div> <script> document.getElementById("registerForm").addEventListener("submit", function(e) { e.preventDefault(); const loading = document.getElementById("loading"); const message = document.getElementById("result") // แสดง spinner และล้างข้อความเดิม message.innerHTML = ''; loading.classList.remove("d-none"); const formData = { fullname: document.getElementById("fullname").value, email: document.getElementById("email").value, affiliate: document.getElementById("affiliate").value, company: document.getElementById("company").value }; google.script.run .withSuccessHandler(function(response) { if (response.success) { loading.classList.add("d-none"); message.innerHTML = `<div class="alert alert-success">${response.message}</div>`; document.getElementById("registerForm").reset(); } }) .submitForm(formData); }); </script> </body> </html>