DEMO
ระบบสุ่มโรงเรียนทีละ 10 แห่ง โดยไม่ให้ซ้ำกัน โดยมีหลักการดังนี้
- ดึงรายชื่อโรงเรียนจาก Google Sheet
- สุ่มเลือก 10 โรงเรียนจากรายการที่มีอยู่
- บันทึกโรงเรียนที่ถูกสุ่มออกไปยังอีกชีตหรือคอลัมน์เพื่อไม่ให้สุ่มซ้ำ
- อัปเดตฐานข้อมูลโดยลบโรงเรียนที่ถูกสุ่มออกจากรายการเดิม
Sheets
Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle("สุ่มลำดับโรงเรียน")
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function getSchools() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Schools");
var groupSheet = ss.getSheetByName("Groups");
// ถ้ายังไม่มีชีต "Groups" ให้สร้างใหม่ พร้อมเพิ่มหัวตาราง
if (!groupSheet) {
groupSheet = ss.insertSheet("Groups");
groupSheet.appendRow(["กลุ่มที่", "โรงเรียน"]);
}
var data = sheet.getDataRange().getValues(); // ดึงข้อมูลทั้งหมดจากชีต "Schools"
var availableSchools = []; // เก็บรายชื่อโรงเรียนที่ยังไม่ถูกเลือก
// วนลูปข้อมูลจากแถวที่ 2 เป็นต้นไป
for (var i = 1; i < data.length; i++) {
if (data[i][1] !== "เลือกแล้ว") { // ตรวจสอบว่าโรงเรียนนี้ยังไม่ได้ถูกเลือก
availableSchools.push({ name: data[i][0], index: i }); // เก็บชื่อและตำแหน่งของโรงเรียน
}
}
var numToSelect = Math.min(10, availableSchools.length);// สุ่มสูงสุด 10 โรงเรียน หรือเท่าที่เหลืออยู่
if (numToSelect === 0) {
return { success: false, message: "ไม่มีโรงเรียนให้สุ่มแล้ว" }; // แจ้งเตือนถ้าไม่มีโรงเรียนให้สุ่ม
}
var selectedSchools = []; // เก็บรายชื่อโรงเรียนที่สุ่มได้
while (selectedSchools.length < numToSelect) {
var randomIndex = Math.floor(Math.random() * availableSchools.length); // สุ่มค่า index
selectedSchools.push(availableSchools.splice(randomIndex, 1)[0]); // เพิ่มโรงเรียนที่สุ่มได้ และลบออกจากอาร์เรย์
}
// บันทึกว่าโรงเรียนถูกเลือกแล้ว
selectedSchools.forEach(school => {
sheet.getRange(school.index + 1, 2).setValue("เลือกแล้ว");
});
// หาเลขกลุ่มล่าสุด
var lastGroupRow = groupSheet.getLastRow();
var groupNumber = lastGroupRow > 1 ? groupSheet.getRange(lastGroupRow, 1).getValue() + 1 : 1;
// บันทึกข้อมูลลงชีต Groups
selectedSchools.forEach(school => {
groupSheet.appendRow([groupNumber, school.name]);
});
return { success: true, schools: selectedSchools };
}
index.html
<!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>สุ่มลำดับโรงเรียน</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <style> body { background: linear-gradient(to right, #4facfe, #00f2fe); min-height: 100vh; display: flex; justify-content: center; align-items: center; text-align: center; } .card { border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); } .btn{ width: 250px; } </style> </head> <body> <div class="container"> <h2 class="text-white my-3">🎯 ระบบสุ่มลำดับโรงเรียน</h2> <button class="btn btn-success my-3" onclick="randomizeSchools()">🎲 สุ่มโรงเรียน</button> <div id="school-list" class="row g-3"></div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script> function randomizeSchools() { document.getElementById("school-list").innerHTML = `<p class="text-white">กำลังสุ่ม...</p>`; google.script.run.withSuccessHandler(function(result) { if (!result.success) { document.getElementById("school-list").innerHTML = `<div class="text-center"> <p class="text-danger">${result.message}</p> <button class="btn btn-danger my-3" onclick="resetSchools()">🔄 รีเซ็ต</button></div>`; return; } let html = ""; result.schools.forEach((school, index) => { html += ` <div class="col-md-4"> <div class="card text-center p-3"> <h5 class="card-title">🏫 ${school.name}</h5> <p class="text-muted">ลำดับที่ ${index + 1}</p> </div> </div> `; }); document.getElementById("school-list").innerHTML = html; }).getSchools(); } function resetSchools() { if (!confirm("คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตข้อมูลทั้งหมด?")) return; google.script.run.withSuccessHandler(function(result) { document.getElementById("school-list").innerHTML = ''; alert(result.message); }).resetSchools(); } </script> </body> </html>
var numToSelect = Math.min(10, availableSchools.length);
***เปลี่ยนจำนวนจาก 10 เป็นจำนวนที่ต้องการ***