ระบบจัดกลุ่มสุ่มทีละ 10 โดยไม่ซ้ำกัน

 


DEMO

ระบบสุ่มโรงเรียนทีละ 10 แห่ง โดยไม่ให้ซ้ำกัน โดยมีหลักการดังนี้

  1. ดึงรายชื่อโรงเรียนจาก Google Sheet
  2. สุ่มเลือก 10 โรงเรียนจากรายการที่มีอยู่
  3. บันทึกโรงเรียนที่ถูกสุ่มออกไปยังอีกชีตหรือคอลัมน์เพื่อไม่ให้สุ่มซ้ำ
  4. อัปเดตฐานข้อมูลโดยลบโรงเรียนที่ถูกสุ่มออกจากรายการเดิม


Sheets

Schools


Groups





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>



    


หากต้องการเปลี่ยนจำนวนสมาชิกให้แก้ไขจำนวนในตัวแปร numToSelect ของฟังก์ชัน getSchools() 
var numToSelect = Math.min(10, availableSchools.length); 
***เปลี่ยนจำนวนจาก 10 เป็นจำนวนที่ต้องการ***


แสดงความคิดเห็น (0)
ใหม่กว่า เก่ากว่า