ทำหน้าเว็บสวยและเร็วใน Google Apps Script ด้วย HtmlService
อัปเดต 5 ตุลาคม 2026
หน้าเว็บของ Apps Script ไม่จำเป็นต้องหน้าตาเรียบ ๆ ด้วยเทคนิคแยกไฟล์และใช้ CSS framework ทำให้ได้เว็บแอปที่ สวย ใช้บนมือถือได้ดี และดูแลโค้ดง่าย
ระบบพร้อมใช้ที่เกี่ยวข้อง
แยกไฟล์ด้วยฟังก์ชัน include
function doGet() {
return HtmlService.createTemplateFromFile('index').evaluate()
.setTitle('ระบบของฉัน')
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
function include(name) {
return HtmlService.createHtmlOutputFromFile(name).getContent();
}
ใน index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<?!= include('styles'); ?>
</head>
<body>
<div id="app"></div>
<?!= include('script'); ?>
</body>
</html>
เรียกฟังก์ชันฝั่งเซิร์ฟเวอร์
google.script.run
.withSuccessHandler(list => render(list))
.withFailureHandler(err => showError(err.message))
.getProducts();
google.script.run เป็นแบบ asynchronous เสมอ ควรแสดงสถานะ "กำลังโหลด" ระหว่างรอ
เทคนิคให้เร็วขึ้น
- โหลดข้อมูลเริ่มต้นผ่าน template (
<?= JSON.stringify(data) ?>) แทนการเรียกgoogle.script.runหลังหน้าโหลด - รวมคำขอหลายอย่างเป็นฟังก์ชันเดียว ลดจำนวนรอบที่เรียกเซิร์ฟเวอร์
- ใช้
CacheServiceแคชข้อมูลที่ไม่ค่อยเปลี่ยน - ใส่
<base target="_top">เพื่อให้ลิงก์เปิดนอก iframe ของ Google
คำถามที่พบบ่อย: ทำหน้าเว็บสวยใน Apps Script
ได้ ใส่ลิงก์ CDN ในไฟล์ HTML ได้ตามปกติ หรือคัดลอก CSS ที่ build แล้วมาไว้ในไฟล์ styles.html
ต้องเพิ่ม addMetaTag("viewport", "width=device-width, initial-scale=1") ที่ฝั่ง doGet เพราะแท็ก viewport ในไฟล์ HTML จะไม่มีผล
ได้ โดย build เป็นไฟล์ JS/CSS ไฟล์เดียวแล้วฝังลงใน HTML หรือโหลดจาก CDN
ระบบอื่นที่น่าสนใจ
POS ร้านขายยา
จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน