บทความ / หัวข้อ GAS

ใช้ Google Sheets เป็นฐานข้อมูลด้วย Apps Script: CRUD และเทคนิคทำให้เร็ว

อัปเดต 5 ตุลาคม 2026

Google Sheets ใช้เป็นฐานข้อมูลสำหรับระบบขนาดเล็ก-กลางได้ดีมาก ข้อดีคือ เจ้าของร้านเปิดดู/แก้ข้อมูลเองได้ทันที และสำรองข้อมูลอัตโนมัติบน Google Drive หน้านี้รวมเทคนิคที่ทำให้ระบบเร็วและไม่พังเมื่อมีผู้ใช้หลายคน

ระบบพร้อมใช้ที่เกี่ยวข้อง

หลักการออกแบบชีต

  • 1 ชีต = 1 ตาราง แถวแรกเป็นชื่อคอลัมน์
  • มีคอลัมน์ id ที่ไม่ซ้ำ (เช่น Utilities.getUuid()) ไว้อ้างอิงแถว
  • อย่าเก็บข้อมูลหลายประเภทในชีตเดียว อย่า merge เซลล์ในชีตข้อมูล

CRUD แบบเร็ว (อ่าน/เขียนครั้งเดียว)

function readAll(name) {
  const values = SpreadsheetApp.getActive().getSheetByName(name).getDataRange().getValues();
  const [head, ...rows] = values;
  return rows.map(r => Object.fromEntries(head.map((h, i) => [h, r[i]])));
}

function insert(name, obj) {
  const sh = SpreadsheetApp.getActive().getSheetByName(name);
  const head = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];
  sh.appendRow(head.map(h => obj[h] ?? ''));
}

function updateById(name, id, patch) {
  const sh = SpreadsheetApp.getActive().getSheetByName(name);
  const values = sh.getDataRange().getValues();
  const idCol = values[0].indexOf('id');
  const i = values.findIndex(r => r[idCol] === id);
  if (i < 1) return false;
  values[0].forEach((h, c) => { if (h in patch) values[i][c] = patch[h]; });
  sh.getRange(i + 1, 1, 1, values[i].length).setValues([values[i]]);
  return true;
}

เทคนิคทำให้เร็ว

  1. อ่านทีเดียวด้วย getValues() แทนการวนอ่านทีละเซลล์ (เร็วกว่าหลายสิบเท่า)
  2. เขียนทีเดียวด้วย setValues() แทน setValue() ในลูป
  3. แคชข้อมูลที่อ่านบ่อย ด้วย CacheService.getScriptCache() เช่น รายการสินค้า
  4. ใช้ LockService ทุกครั้งที่เขียน เพื่อกันข้อมูลทับกัน เช่น เลขที่บิลซ้ำ
  5. เก็บประวัติเก่าแยกชีต/แยกไฟล์ เมื่อข้อมูลเกินหลักแสนแถว

ข้อจำกัดที่ควรรู้

ไฟล์ Google Sheets มีขีดจำกัดจำนวนเซลล์ทั้งไฟล์ (ราว 10 ล้านเซลล์) และสคริปต์ทำงานได้สูงสุด 6 นาทีต่อครั้ง ระบบ POS หรือระบบสต็อกของร้านทั่วไปจึงใช้ได้สบาย แต่ระบบที่มีธุรกรรมหลักล้านต่อวันควรใช้ฐานข้อมูลจริง

คำถามที่พบบ่อย: ใช้ Google Sheets เป็นฐานข้อมูล

จำกัดที่จำนวนเซลล์ทั้งไฟล์ประมาณ 10 ล้านเซลล์ เช่น ตาราง 10 คอลัมน์เก็บได้ราว 1 ล้านแถว แต่ควรแยกข้อมูลเก่าออกเพื่อให้ระบบเร็ว

ส่วนใหญ่เกิดจากการเรียก getValue/setValue ทีละเซลล์ในลูป ให้เปลี่ยนเป็น getValues/setValues ครั้งเดียว และแคชข้อมูลที่ใช้บ่อย

อาจเกิดได้ ให้ใช้ LockService.getScriptLock() ครอบส่วนที่เขียนข้อมูลทุกครั้ง

ระบบอื่นที่น่าสนใจ

POS ร้านขายยา
แนะนำ
ดูรายละเอียด
POS ร้านค้าปลีก-ส่ง v1.0.0

POS ร้านขายยา

จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน

฿2,490.00
0
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
แนะนำ
ดูรายละเอียด
POS ร้านอาหาร & เครื่องดื่ม v2.0.0

POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)

ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน

฿2,990.00
0