เนื่องจาก Google Sheet ของคุณไม่ได้เปิดเป็นสาธารณะ (Private) วิธีที่ง่ายและปลอดภัยที่สุดคือการใช้ Google Apps Script Web App เพื่อดึงข้อมูลอย่างปลอดภัย
วิธีการตั้งค่าสคริปต์ใน Google Sheet (ทำครั้งเดียว):
- เปิด Google Sheet "ตารางงาน Extreme IT 2026" ของคุณ
- ไปที่เมนูด้านบน คลิก ส่วนขยาย (Extensions) > Apps Script
- ลบโค้ดเดิมออกทั้งหมด แล้วนำโค้ดสคริปต์ด้านล่างนี้ไปวาง
- คลิกปุ่ม บันทึก (Save) (ไอคอนแผ่นดิสก์)
- คลิกปุ่ม การทำให้ใช้งานได้ (Deploy) > การทำให้ใช้งานได้ใหม่ (New deployment)
- เลือกประเภทเป็น เว็บแอป (Web app)
- ตั้งค่าการเข้าถึงดังนี้:
- ผู้ดำเนินการ (Execute as): ฉัน (Me)
- ผู้มีสิทธิ์เข้าถึง (Who has access): ทุกคน (Anyone) *(เพื่อให้แอปดึงข้อมูลได้)*
- คลิก ทำให้ใช้งานได้ (Deploy) และกดยอมรับสิทธิ์ (Authorize access) จากบัญชี Google ของคุณ
- คัดลอก URL เว็บแอป (Web app URL) ที่ได้มาวางในช่องด้านล่างนี้
function doGet() {
try {
// ดึงข้อมูลชีต "ตารางงาน 2026"
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ตารางงาน 2026");
if (!sheet) {
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // ถ้าไม่เจอ ให้เอาชีตแรก
}
// ค้นหาแถวสุดท้ายและคอลัมน์สุดท้ายที่มีข้อมูลจริง (หลีกเลี่ยงการดึงแถวเปล่าข้างล่างเป็นพันแถว)
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
if (lastRow === 0 || lastColumn === 0) {
return ContentService.createTextOutput(JSON.stringify({
status: "success",
data: [],
backgrounds: []
})).setMimeType(ContentService.MimeType.JSON);
}
// ดึงข้อมูลเฉพาะช่วงที่มีการเขียนข้อมูลจริง ช่วยลดเวลาประมวลผลได้กว่า 10 เท่า!
var range = sheet.getRange(1, 1, lastRow, lastColumn);
var data = range.getValues();
var backgrounds = range.getBackgrounds(); // ดึงสีเฉพาะแถวที่มีข้อมูลจริง
return ContentService.createTextOutput(JSON.stringify({
status: "success",
data: data,
backgrounds: backgrounds
}))
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: error.toString()
}))
.setMimeType(ContentService.MimeType.JSON);
}
}