ระบบสุ่มโรงเรียนทีละ 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();
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);
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>
หากต้องการเปลี่ยนจำนวนสมาชิกให้แก้ไขจำนวนในตัวแปร
numToSelect ของฟังก์ชัน
getSchools() var numToSelect = Math.min(10, availableSchools.length);
***เปลี่ยนจำนวนจาก 10 เป็นจำนวนที่ต้องการ***