EasyGAS IDE

โค้ดที่แชร์

สมุดเยี่ยม — ลงชื่อฝากข้อความ ลง Google Sheets

ทีม EasyGAS· แชร์เมื่อ 9 ต.ค. 69

ต้นฉบับวางหน้าเว็บบน GitHub Pagesโคลนไปแล้วเผยแพร่บน Google ได้ฟรี ไม่ต้องใช้ Pro

ตัวอย่างระบบเล็ก ๆ จากทีม EasyGAS: หน้าเว็บให้คนลงชื่อและฝากข้อความ บันทึกลง Google Sheets ของเจ้าของแอป หลังโคลน กด เผยแพร่ ได้เลย ไม่ต้องตั้งค่าอะไร — สคริปต์สร้างชีตชื่อ "สมุดเยี่ยม (EasyGAS)" ให้เองครั้งแรกที่มีคนใช้ และจำ ID ไว้ใน Script Properties (ไม่มี ID ใครฝังในโค้ด) ใช้เป็นต้นแบบของ: แบบฟอร์มรับเรื่อง, กล่องข้อเสนอแนะ, สมุดลงชื่อหน้างาน
โค้ดที่แชร์ · สมุดเยี่ยม — ลงชื่อฝากข้อความ ลง Google Sheets3 ไฟล์ · 9.1 KB · เวอร์ชัน 1 · สแกนแล้วไม่พบคีย์ส่วนตัว · โคลนแล้ว 2 ครั้ง
easygaside.tech/s/8ntkaj5gqt
ไฟล์appsscript.json15 บรรทัดCode.gs78 บรรทัดIndex.html105 บรรทัด
สิทธิ์ที่ Google จะถามตอนเผยแพร่อ่าน/เขียน Google Sheets (spreadsheets)ตั้ง trigger ให้ตัวเอง (script.scriptapp)Sheets
โดย ทีม EasyGAS

ไฟล์ทั้งหมด

อ่านก่อนโคลนได้ ใน EasyGAS IDE จะได้ไฟล์ชุดนี้เป็นโปรเจกต์ใหม่ แล้วค่อยเผยแพร่เข้าบัญชี Google ของคุณ

1/**2 * สมุดเยี่ยม (Guestbook) — ตัวอย่างระบบจาก EasyGAS IDE3 * หน้าเว็บให้คนลงชื่อและฝากข้อความ → บันทึกลง Google Sheets ของเจ้าของแอป4 * ชีตถูกสร้างให้เองครั้งแรกที่ใช้ (ไม่ต้องแก้ ID อะไรในโค้ด)5 */67var SHEET_NAME = 'Guestbook';8var PROP_KEY = 'GUESTBOOK_SPREADSHEET_ID';910function doGet() {11  return HtmlService.createHtmlOutputFromFile('Index')12    .setTitle('สมุดเยี่ยม')13    .addMetaTag('viewport', 'width=device-width, initial-scale=1');14}1516/** ชีตที่เก็บข้อความ: สร้างครั้งแรก แล้วจำ ID ไว้ใน Script Properties */17function getSheet_() {18  var props = PropertiesService.getScriptProperties();19  var id = props.getProperty(PROP_KEY);20  var ss = null;21  if (id) {22    try {23      ss = SpreadsheetApp.openById(id);24    } catch (e) {25      ss = null;26    }27  }28  if (!ss) {29    ss = SpreadsheetApp.create('สมุดเยี่ยม (EasyGAS)');30    props.setProperty(PROP_KEY, ss.getId());31  }32  var sheet = ss.getSheetByName(SHEET_NAME);33  if (!sheet) {34    sheet = ss.getSheets()[0];35    sheet.setName(SHEET_NAME);36    sheet.appendRow(['เวลา', 'ชื่อ', 'ข้อความ']);37    sheet.setFrozenRows(1);38  }39  return sheet;40}4142/** บันทึกข้อความใหม่ แล้วส่งรายการล่าสุดกลับไปให้หน้าเว็บ */43function addEntry(payload) {44  var lock = LockService.getScriptLock();45  lock.waitLock(10000);46  try {47    var name = String((payload && payload.name) || '').trim().slice(0, 60);48    var message = String((payload && payload.message) || '').trim().slice(0, 500);49    if (!name) return { ok: false, error: 'กรุณาใส่ชื่อ' };50    if (!message) return { ok: false, error: 'กรุณาพิมพ์ข้อความ' };51    var sheet = getSheet_();52    sheet.appendRow([new Date(), name, message]);53    return { ok: true, entries: listEntries() };54  } catch (e) {55    return { ok: false, error: 'บันทึกไม่สำเร็จ: ' + e.message };56  } finally {57    lock.releaseLock();58  }59}6061/** 10 ข้อความล่าสุด ใหม่สุดก่อน */62function listEntries() {63  var sheet = getSheet_();64  var last = sheet.getLastRow();65  if (last < 2) return [];66  var count = Math.min(10, last - 1);67  var rows = sheet.getRange(last - count + 1, 1, count, 3).getValues();68  return rows69    .reverse()70    .map(function (r) {71      return {72        time: Utilities.formatDate(new Date(r[0]), 'Asia/Bangkok', 'd MMM yyyy HH:mm'),73        name: String(r[1]),74        message: String(r[2])75      };76    });77}78

รีวิว

รีวิวได้หลังโคลนไปใช้ · ทำได้ในโปรแกรม EasyGAS IDE

ยังไม่มีรีวิว

ถามตอบ

ถามคนแชร์ เล่าว่าเอาไปใช้แล้วเป็นยังไง หรือแนบเวอร์ชันต่อยอดของคุณ

ยังไม่มี

ยังไม่มีใครถาม เป็นคนแรกก็ได้

ถามหรือเล่าผลการใช้งาน