🎓 āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē Scholarship Record System

🎓 āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē Scholarship Management System

āļ§ัāļ™āļ™ี้āļ‚āļ­āđāļš่āļ‡āļ›ัāļ™āļ­ีāļāļŦāļ™ึ่āļ‡ Web Application āļŠāļģāļŦāļĢัāļšāļ‡āļēāļ™āđƒāļ™āļŠāļ–āļēāļ™āļĻึāļāļĐāļē āļ„ืāļ­ “āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē” (Scholarship Management System) āļžัāļ’āļ™āļēāļ”้āļ§āļĒ Google Apps Script + Google Sheets + HTML + CSS + JavaScript āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āļ›āļĢāļ°āļĒุāļāļ•์āđƒāļŠ้āļŠāļģāļŦāļĢัāļšāļ‡āļēāļ™āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļ‚āļ­āļ‡āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™āđ„āļ”้āļ—ัāļ™āļ—ี



āļĢāļ°āļšāļšāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļžื่āļ­āļŠ่āļ§āļĒāļĨāļ”āļāļēāļĢāļšัāļ™āļ—ึāļāļ‚้āļ­āļĄูāļĨāđāļšāļšāļāļĢāļ°āļ”āļēāļĐ āđāļĨāļ°āļĢāļ§āļšāļĢāļ§āļĄāļ‚้āļ­āļĄูāļĨāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāđāļĨāļ°āļĢāļēāļĒāļŠื่āļ­āļ™ัāļāđ€āļĢีāļĒāļ™āļœู้āđ„āļ”้āļĢัāļšāļ—ุāļ™āđ„āļ§้āđƒāļ™āļĢāļ°āļšāļšāđ€āļ”ีāļĒāļ§ āļŠāļēāļĄāļēāļĢāļ–āđ€āļžิ่āļĄ āđāļ้āđ„āļ‚ āļĨāļš āļ„้āļ™āļŦāļē āļŠāļĢุāļ›āļ‚้āļ­āļĄูāļĨ āđāļĨāļ°āļˆัāļ”āļžิāļĄāļž์āļĢāļēāļĒāļ‡āļēāļ™āđ„āļ”้


✨ āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āļĢāļ°āļšāļšāļ›āļĢāļ°āļāļ­āļšāļ”้āļ§āļĒāļŸัāļ‡āļ์āļŠัāļ™āļŦāļĨัāļ āđ€āļŠ่āļ™

📊 Dashboard āļŠāļĢุāļ›āļ‚้āļ­āļĄูāļĨāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

🎓 āļšัāļ™āļ—ึāļāļ‚้āļ­āļĄูāļĨāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

ðŸ‘Ļ‍🎓 āļšัāļ™āļ—ึāļāļĢāļēāļĒāļŠื่āļ­āļ™ัāļāđ€āļĢีāļĒāļ™āļœู้āļĢัāļšāļ—ุāļ™

✏️ āđāļ้āđ„āļ‚āļ‚้āļ­āļĄูāļĨ

🗑️ āļĨāļšāļ‚้āļ­āļĄูāļĨ

🔍 āļ„้āļ™āļŦāļēāđāļĨāļ°āļāļĢāļ­āļ‡āļ‚้āļ­āļĄูāļĨ

💰 āļŠāļĢุāļ›āļˆāļģāļ™āļ§āļ™āđ€āļ‡ิāļ™āļ—ุāļ™

📅 āļāļĢāļ­āļ‡āļ•āļēāļĄāļ›ีāļāļēāļĢāļĻึāļāļĐāļēāđāļĨāļ°āļ āļēāļ„āđ€āļĢีāļĒāļ™

ðŸŦ āļāļĢāļ­āļ‡āļ•āļēāļĄāļĢāļ°āļ”ัāļšāļŠั้āļ™

📋 āļˆัāļ”āļāļēāļĢāļĢāļēāļĒāļāļēāļĢāļ•ัāļ§āđ€āļĨืāļ­āļāļˆāļēāļ Google Sheets

⚙️ āļ•ั้āļ‡āļ„่āļēāļĢāļ°āļšāļšāļœ่āļēāļ™āļŦāļ™้āļē Settings

🔐 āļĢāļ°āļšāļš Admin āļŠāļģāļŦāļĢัāļšāļˆัāļ”āļāļēāļĢāļ‚้āļ­āļĄูāļĨ

🔑 Password āļˆāļģāđ„āļ§้āđƒāļ™āļŦāļ™่āļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļĢāļ°āļŦāļ§่āļēāļ‡āđƒāļŠ้āļ‡āļēāļ™

📄 āđ€āļĄāļ™ูāļĢāļēāļĒāļ‡āļēāļ™

👁️ āđāļŠāļ”āļ‡āļ•ัāļ§āļ­āļĒ่āļēāļ‡āļĢāļēāļĒāļ‡āļēāļ™āļšāļ™āļŦāļ™้āļēāļˆāļ­āļ่āļ­āļ™āļžิāļĄāļž์

ðŸ–Ļ️ āļžิāļĄāļž์āļĢāļēāļĒāļ‡āļēāļ™ A4

📊 āļ›ุ่āļĄ Google Sheet āđāļšāļš Icon

📖 āļ„ู่āļĄืāļ­āļāļēāļĢāđƒāļŠ้āļ‡āļēāļ™āđāļšāļšāļĨāļ°āđ€āļ­ีāļĒāļ”

ðŸ“ą Responsive āļĢāļ­āļ‡āļĢัāļšāļ„āļ­āļĄāļžิāļ§āđ€āļ•āļ­āļĢ์ āđāļ—็āļšāđ€āļĨ็āļ• āđāļĨāļ°āđ‚āļ—āļĢāļĻัāļžāļ—์āļĄืāļ­āļ–ืāļ­


ðŸ–Ĩ️ āļĢูāļ›āđāļšāļšāļŦāļ™้āļēāļˆāļ­

āļĢāļ°āļšāļšāļ­āļ­āļāđāļšāļšāļ”้āļ§āļĒ Bootstrap 5 āđ€āļ™้āļ™āļĢูāļ›āđāļšāļš Modern Dashboard

āļ›āļĢāļ°āļāļ­āļšāļ”้āļ§āļĒ

1. Sidebar Menu

āđƒāļŠ้āļŠāļģāļŦāļĢัāļšāđ€āļ‚้āļēāļ–ึāļ‡āļŠ่āļ§āļ™āļ•่āļēāļ‡ āđ† āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļŠ่āļ™

Dashboard

āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

āļœู้āļĢัāļšāļ—ุāļ™

āļĢāļēāļĒāļ‡āļēāļ™

āļˆัāļ”āļāļēāļĢāļ•ัāļ§āđ€āļĨืāļ­āļ

āļ•ั้āļ‡āļ„่āļēāļĢāļ°āļšāļš

Google Sheet

āļ„ู่āļĄืāļ­

āļšāļ™āđ‚āļ—āļĢāļĻัāļžāļ—์āļĄืāļ­āļ–ืāļ­ Sidebar āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›ิāļ”–āļ›ิāļ”āđ„āļ”้ āļ—āļģāđƒāļŦ้āđƒāļŠ้āļ‡āļēāļ™āļšāļ™āļŦāļ™้āļēāļˆāļ­āļ‚āļ™āļēāļ”āđ€āļĨ็āļāđ„āļ”้āļŠāļ°āļ”āļ§āļ


📊 Dashboard

āļŦāļ™้āļē Dashboard āđƒāļŠ้āļŠāļģāļŦāļĢัāļšāļ”ูāļ āļēāļžāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚้āļ­āļĄูāļĨ āđ€āļŠ่āļ™

āļˆāļģāļ™āļ§āļ™āļ—ุāļ™āļ—ั้āļ‡āļŦāļĄāļ”    āđāļŠāļ”āļ‡āļˆāļģāļ™āļ§āļ™āļĢāļēāļĒāļāļēāļĢāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļ—ี่āļĄีāļ­āļĒู่āđƒāļ™āļĢāļ°āļšāļš

āļˆāļģāļ™āļ§āļ™āļ™ัāļāđ€āļĢีāļĒāļ™āļ—ี่āđ„āļ”้āļĢัāļšāļ—ุāļ™    āđāļŠāļ”āļ‡āļˆāļģāļ™āļ§āļ™āļœู้āļĢัāļšāļ—ุāļ™āļ—ั้āļ‡āļŦāļĄāļ”

āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļ—ุāļ™    āļ„āļģāļ™āļ§āļ“āļĒāļ­āļ”āđ€āļ‡ิāļ™āļ—ุāļ™āļˆāļēāļāļ‚้āļ­āļĄูāļĨāļ—ี่āļšัāļ™āļ—ึāļāđ„āļ§้

āļŠāļ–āļēāļ™āļ°āļ—ุāļ™    āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāļ‚้āļ­āļĄูāļĨāļĄāļēāđāļŠāļ”āļ‡āđ€āļ›็āļ™ Card āļŦāļĢืāļ­āļāļĢāļēāļŸāđ€āļžื่āļ­āļŠ่āļ§āļĒāđƒāļŦ้āļœู้āļ”ูāđāļĨāļĢāļ°āļšāļšāđ€āļŦ็āļ™āļ āļēāļžāļĢāļ§āļĄāđ„āļ”้āļ‡่āļēāļĒāļ‚ึ้āļ™


🎓 āļĢāļ°āļšāļšāļˆัāļ”āļāļēāļĢāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

āļŠāļēāļĄāļēāļĢāļ–āļšัāļ™āļ—ึāļāļĢāļēāļĒāļĨāļ°āđ€āļ­ีāļĒāļ”āļ‚āļ­āļ‡āļ—ุāļ™ āđ€āļŠ่āļ™

āļ›ีāļāļēāļĢāļĻึāļāļĐāļē

āļ āļēāļ„āđ€āļĢีāļĒāļ™

āļŠื่āļ­āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

āļ›āļĢāļ°āđ€āļ āļ—āļ—ุāļ™

āļŦāļ™่āļ§āļĒāļ‡āļēāļ™/āļœู้āđƒāļŦ้āļ—ุāļ™

āļˆāļģāļ™āļ§āļ™āđ€āļ‡ิāļ™āļ•่āļ­āļ„āļ™

āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļĢāļ§āļĄ

āļ§ัāļ™āļ—ี่āđ€āļĢิ่āļĄāļ•้āļ™

āļ§ัāļ™āļ—ี่āļŠิ้āļ™āļŠุāļ”

āđ€āļ‡ื่āļ­āļ™āđ„āļ‚

āļĢāļēāļĒāļĨāļ°āđ€āļ­ีāļĒāļ”

āļŠāļ–āļēāļ™āļ°

āļ‚้āļ­āļĄูāļĨāļŠāļēāļĄāļēāļĢāļ– āđ€āļžิ่āļĄ / āđāļ้āđ„āļ‚ / āļĨāļš / āļ„้āļ™āļŦāļē āđ„āļ”้āđƒāļ™āļŦāļ™้āļēāđ€āļ”ีāļĒāļ§


ðŸ‘Ļ‍🎓 āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļœู้āļĢัāļšāļ—ุāļ™

āļŠāļģāļŦāļĢัāļšāļšัāļ™āļ—ึāļāļĢāļēāļĒāļŠื่āļ­āļ™ัāļāđ€āļĢีāļĒāļ™āļ—ี่āđ„āļ”้āļĢัāļšāļ—ุāļ™ āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āđ€āļ็āļšāļ‚้āļ­āļĄูāļĨ āđ€āļŠ่āļ™

  1. āđ€āļĨāļ‚āļ›āļĢāļ°āļˆāļģāļ•ัāļ§āļ™ัāļāđ€āļĢีāļĒāļ™
  2. āļ„āļģāļ™āļģāļŦāļ™้āļē
  3. āļŠื่āļ­
  4. āļ™āļēāļĄāļŠāļุāļĨ
  5. āļĢāļ°āļ”ัāļšāļŠั้āļ™
  6. āļŦ้āļ­āļ‡
  7. āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļ—ี่āđ„āļ”้āļĢัāļš
  8. āļˆāļģāļ™āļ§āļ™āđ€āļ‡ิāļ™
  9. āļ§ัāļ™āļ—ี่āļ­āļ™ุāļĄัāļ•ิ
  10. āļŠāļ–āļēāļ™āļ°
  11. āļŦāļĄāļēāļĒāđ€āļŦāļ•ุ

āļĢāļ°āļšāļšāļŠāļēāļĄāļēāļĢāļ–āđ€āļŠื่āļ­āļĄāđ‚āļĒāļ‡āļ‚้āļ­āļĄูāļĨāļœู้āļĢัāļšāļ—ุāļ™āļัāļšāļ‚้āļ­āļĄูāļĨāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāđ„āļ”้


📄 āđ€āļĄāļ™ูāļĢāļēāļĒāļ‡āļēāļ™

āļˆุāļ”āđ€āļ”่āļ™āļ­ีāļāļŠ่āļ§āļ™āļŦāļ™ึ่āļ‡āļ„ืāļ­ āļĢāļ°āļšāļšāļĢāļēāļĒāļ‡āļēāļ™āđāļšāļš Preview āļ่āļ­āļ™āļžิāļĄāļž์

āļœู้āđƒāļŠ้āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āđ€āļ‡ื่āļ­āļ™āđ„āļ‚ āđ€āļŠ่āļ™

  • āļ›āļĢāļ°āđ€āļ āļ—āļĢāļēāļĒāļ‡āļēāļ™
  • āļ›ีāļāļēāļĢāļĻึāļāļĐāļē
  • āļ āļēāļ„āđ€āļĢีāļĒāļ™
  • āļĢāļ°āļ”ัāļšāļŠั้āļ™
  • āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē
  • āļŠāļ–āļēāļ™āļ°
  • āļ„āļģāļ„้āļ™āļŦāļē

āļˆāļēāļāļ™ั้āļ™āļāļ” ðŸ‘️ āđāļŠāļ”āļ‡āļĢāļēāļĒāļ‡āļēāļ™

āļĢāļ°āļšāļšāļˆāļ°āļĒัāļ‡āđ„āļĄ่āļžิāļĄāļž์āļ—ัāļ™āļ—ี āđāļ•่āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļ‡āļēāļ™āļˆāļģāļĨāļ­āļ‡āđƒāļ™āļĢูāļ›āđāļšāļšāļāļĢāļ°āļ”āļēāļĐ A4 āļšāļ™āļŦāļ™้āļēāļˆāļ­āļ่āļ­āļ™

āļœู้āđƒāļŠ้āļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–ูāļāļ•้āļ­āļ‡āļ่āļ­āļ™āļāļ” ðŸ–Ļ️ āļžิāļĄāļž์āļĢāļēāļĒāļ‡āļēāļ™

āļŠ่āļ§āļĒāļĨāļ”āļ›ัāļāļŦāļēāļžิāļĄāļž์āļ‚้āļ­āļĄูāļĨāļœิāļ”āļŦāļĢืāļ­āđ€āļŠีāļĒāļāļĢāļ°āļ”āļēāļĐāđ‚āļ”āļĒāđ„āļĄ่āļˆāļģāđ€āļ›็āļ™


📑 āļĢูāļ›āđāļšāļšāļĢāļēāļĒāļ‡āļēāļ™

āļĢāļ°āļšāļšāļĢāļ­āļ‡āļĢัāļšāļ•ัāļ§āļ­āļĒ่āļēāļ‡āļĢāļēāļĒāļ‡āļēāļ™ 2 āļ›āļĢāļ°āđ€āļ āļ—

1. āļĢāļēāļĒāļ‡āļēāļ™āļ‚้āļ­āļĄูāļĨāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

āļ›āļĢāļ°āļāļ­āļšāļ”้āļ§āļĒ

āļĨāļģāļ”ัāļšāļ›ี/āļ āļēāļ„āđ€āļĢีāļĒāļ™āļŠื่āļ­āļ—ุāļ™āļ›āļĢāļ°āđ€āļ āļ—āļœู้āđƒāļŦ้āļ—ุāļ™āļ•่āļ­āļ„āļ™āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļŠāļ–āļēāļ™āļ°

āļ—้āļēāļĒāļĢāļēāļĒāļ‡āļēāļ™āļĄีāļāļēāļĢāļ„āļģāļ™āļ§āļ“ āļˆāļģāļ™āļ§āļ™āļ—ุāļ™āļ—ั้āļ‡āļŦāļĄāļ” āđāļĨāļ° āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļĢāļ§āļĄ āđ‚āļ”āļĒāļ­ัāļ•āđ‚āļ™āļĄัāļ•ิ


2. āļĢāļēāļĒāļ‡āļēāļ™āļĢāļēāļĒāļŠื่āļ­āļœู้āļĢัāļšāļ—ุāļ™

āļ›āļĢāļ°āļāļ­āļšāļ”้āļ§āļĒ

āļĨāļģāļ”ัāļšāđ€āļĨāļ‚āļ›āļĢāļ°āļˆāļģāļ•ัāļ§āļŠื่āļ­-āļ™āļēāļĄāļŠāļุāļĨāļŠั้āļ™/āļŦ้āļ­āļ‡āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļˆāļģāļ™āļ§āļ™āđ€āļ‡ิāļ™āļ§ัāļ™āļ—ี่āļŠāļ–āļēāļ™āļ°

āļ—้āļēāļĒāļĢāļēāļĒāļ‡āļēāļ™āļŠāļĢุāļ›

  • āļˆāļģāļ™āļ§āļ™āļ™ัāļāđ€āļĢีāļĒāļ™
  • āļˆāļģāļ™āļ§āļ™āļœู้āđ„āļ”้āļĢัāļšāļ—ุāļ™
  • āļˆāļģāļ™āļ§āļ™āđ€āļ‡ิāļ™āļĢāļ§āļĄ

āļžāļĢ้āļ­āļĄāļžื้āļ™āļ—ี่āļĨāļ‡āļŠื่āļ­āļœู้āļˆัāļ”āļ—āļģāđāļĨāļ°āļœู้āļ•āļĢāļ§āļˆāļŠāļ­āļš


🔐 āļĢāļ°āļšāļš Login āļŠāļģāļŦāļĢัāļšāļœู้āļ”ูāđāļĨ

āļŠ่āļ§āļ™āļ—ี่āđ€āļี่āļĒāļ§āļ‚้āļ­āļ‡āļัāļšāļāļēāļĢāđāļ้āđ„āļ‚āļ‚้āļ­āļĄูāļĨāļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āđƒāļŦ้āļœู้āļ”ูāđāļĨāļĢāļ°āļšāļš Login āļ่āļ­āļ™āđƒāļŠ้āļ‡āļēāļ™

āļ•ัāļ§āļ­āļĒ่āļēāļ‡āđāļ™āļ§āļ„ิāļ”āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļĢāļŦัāļŠāļœ่āļēāļ™

function adminLogin(password) {

  const settings = getSettingsObject_();

  const correctPassword =
    String(settings.AdminPassword || '1234');

  if (String(password) !== correctPassword) {
    return {
      success: false,
      message: 'āļĢāļŦัāļŠāļœ่āļēāļ™āđ„āļĄ่āļ–ูāļāļ•้āļ­āļ‡'
    };
  }

  const token = Utilities.getUuid();

  CacheService
    .getScriptCache()
    .put(
      'ADMIN_' + token,
      '1',
      21600
    );

  return {
    success: true,
    token: token
  };
}

āđāļ™āļ§āļ—āļēāļ‡āļ™ี้āļŠ่āļ§āļĒāđƒāļŦ้āļœู้āđƒāļŠ้āđ„āļĄ่āļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āļāļĢāļ­āļāļĢāļŦัāļŠāļœ่āļēāļ™āđƒāļŦāļĄ่āļ—ุāļāļ„āļĢั้āļ‡āļ—ี่āļāļ”āļˆัāļ”āļāļēāļĢāļ‚้āļ­āļĄูāļĨāļĢāļ°āļŦāļ§่āļēāļ‡ Session āđ€āļ”ีāļĒāļ§āļัāļ™


📊 Google Sheets āđ€āļ›็āļ™āļāļēāļ™āļ‚้āļ­āļĄูāļĨ

āļ‚้āļ­āļ”ีāļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ™ี้āļ„ืāļ­āđ„āļĄ่āļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āļĄี Server Database āđāļĒāļāļ•่āļēāļ‡āļŦāļēāļ

āđƒāļŠ้ Google Sheets āđ€āļ›็āļ™āļāļēāļ™āļ‚้āļ­āļĄูāļĨāđ‚āļ”āļĒāļ•āļĢāļ‡

āļ•ัāļ§āļ­āļĒ่āļēāļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢ้āļēāļ‡ Sheet āļ—ี่āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ้āđ„āļ”้ āđ€āļŠ่āļ™

Scholarships
Recipients
Options
Settings

āļĢāļ°āļšāļšāļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļš Sheet āļ•āļ­āļ™āđ€āļĢิ่āļĄāļ•้āļ™āđ„āļ”้

āļ•ัāļ§āļ­āļĒ่āļēāļ‡

function setupSystem() {

  const ss = SpreadsheetApp.getActiveSpreadsheet();

  createSheetIfNotExists_(
    ss,
    'Scholarships',
    [
      'ID',
      'AcademicYear',
      'Term',
      'ScholarshipName',
      'ScholarshipType',
      'Provider',
      'AmountPerStudent',
      'TotalBudget',
      'StartDate',
      'EndDate',
      'Condition',
      'Status',
      'Detail',
      'CreatedAt',
      'UpdatedAt'
    ]
  );

  createSheetIfNotExists_(
    ss,
    'Recipients',
    [
      'ID',
      'ScholarshipID',
      'StudentID',
      'Prefix',
      'FirstName',
      'LastName',
      'Level',
      'Room',
      'Amount',
      'ApprovedDate',
      'Status',
      'Remark',
      'CreatedAt',
      'UpdatedAt'
    ]
  );

  createSheetIfNotExists_(
    ss,
    'Options',
    [
      'Type',
      'Value',
      'SortOrder',
      'Active'
    ]
  );

  createSheetIfNotExists_(
    ss,
    'Settings',
    [
      'Key',
      'Value',
      'Description'
    ]
  );

  return 'Setup completed';
}

⚙️ Sheet : Settings

āļĢāļ°āļšāļšāđƒāļŠ้ Sheet Settings āļŠāļģāļŦāļĢัāļšāļāļģāļŦāļ™āļ”āļ„่āļēāļ•่āļēāļ‡ āđ† āđ‚āļ”āļĒāđ„āļĄ่āļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āđ€āļ‚้āļēāđ„āļ›āđāļ้ Source Code

āļ•ัāļ§āļ­āļĒ่āļēāļ‡

Key                 Value
------------------------------------------
AppName             āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē
SchoolName          āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™āļ•ัāļ§āļ­āļĒ่āļēāļ‡āļ§ิāļ—āļĒāļēāļ„āļĄ
AdminPassword       1234
LogoURL             URL āļĢูāļ›āđ‚āļĨāđ‚āļ้
GoogleSheetURL      URL Google Sheet
Developer           āļŠื่āļ­āļœู้āļžัāļ’āļ™āļē
DeveloperURL        URL āļœู้āļžัāļ’āļ™āļē

āđ€āļĄื่āļ­āļ•้āļ­āļ‡āļāļēāļĢāđ€āļ›āļĨี่āļĒāļ™āļŠื่āļ­āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™ āļŠื่āļ­āļĢāļ°āļšāļš āđ‚āļĨāđ‚āļ้ āļŦāļĢืāļ­āļĨิāļ‡āļ์ Google Sheet āļŠāļēāļĄāļēāļĢāļ–āđāļ้āļˆāļēāļāļŦāļ™้āļē Settings āđ„āļ”้


🔗 āļ›ุ่āļĄāđ€āļ›ิāļ” Google Sheet

āļ•ัāļ§āļ­āļĒ่āļēāļ‡ HTML

<button
  type="button"
  class="btn btn-success"
  onclick="openGoogleSheet()">

  <i class="bi bi-file-earmark-spreadsheet-fill"></i>

</button>

JavaScript

function openGoogleSheet() {

  const url =
    appState.settings.GoogleSheetURL;

  if (!url) {

    Swal.fire({
      icon: 'warning',
      title: 'āđ„āļĄ่āļžāļš URL',
      text: 'āļāļĢุāļ“āļēāļāļģāļŦāļ™āļ” GoogleSheetURL āđƒāļ™ Settings'
    });

    return;
  }

  window.open(
    url,
    '_blank'
  );
}

āļˆึāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨี่āļĒāļ™ URL āđ„āļ”้āļˆāļēāļ Settings āđ‚āļ”āļĒāđ„āļĄ่āļ•้āļ­āļ‡āđāļ้ JavaScript āļ—ุāļāļ„āļĢั้āļ‡


⏳ Loading Animation

āļĢāļ°āļšāļšāļĄี Loading Overlay āđ€āļžื่āļ­āđāļˆ้āļ‡āļœู้āđƒāļŠ้āļ§่āļēāļĢāļ°āļšāļšāļāļģāļĨัāļ‡āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ

āļ•ัāļ§āļ­āļĒ่āļēāļ‡

function showLoading(message) {

  const loading =
    document.getElementById('loadingOverlay');

  const text =
    document.getElementById('loadingText');

  if (text) {
    text.textContent =
      message || 'āļāļģāļĨัāļ‡āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ...';
  }

  if (loading) {
    loading.classList.add('show');
  }
}

function hideLoading() {

  const loading =
    document.getElementById('loadingOverlay');

  if (loading) {
    loading.classList.remove('show');
  }
}

āđƒāļ™āļāļēāļĢāđ€āļĢีāļĒāļāļ‚้āļ­āļĄูāļĨāđƒāļŠ้āļĢูāļ›āđāļšāļš

showLoading('āļāļģāļĨัāļ‡āđ‚āļŦāļĨāļ”āļ‚้āļ­āļĄูāļĨ...');

try {

  const data =
    await gas(
      'getScholarships',
      [{}]
    );

  appState.scholarships = data;

  renderScholarships();

} catch (error) {

  showError(
    error.message
  );

} finally {

  hideLoading();
}

āļāļēāļĢāđƒāļŠ้ finally āļĄีāļ„āļ§āļēāļĄāļŠāļģāļ„ัāļ āđ€āļžāļĢāļēāļ°āļŠ่āļ§āļĒāđƒāļŦ้ Loading āļ–ูāļāļ›ิāļ”āđāļĄ้āļāļēāļĢāđ€āļĢีāļĒāļāļ‚้āļ­āļĄูāļĨāđ€āļิāļ” Error āļĨāļ”āļ›ัāļāļŦāļē Loading āļ„้āļēāļ‡āļšāļ™āļŦāļ™้āļēāļˆāļ­


⚡ āļāļēāļĢāļ›āļĢัāļšāļ„āļ§āļēāļĄāđ€āļĢ็āļ§āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āļĢāļ°āļšāļšāļ­āļ­āļāđāļšāļšāđƒāļŦ้āđ€āļĢีāļĒāļāļ‚้āļ­āļĄูāļĨ āđ€āļ‰āļžāļēāļ°āļŠ่āļ§āļ™āļ—ี่āļˆāļģāđ€āļ›็āļ™

āļ•ัāļ§āļ­āļĒ่āļēāļ‡āđ€āļŠ่āļ™

āđ€āļĄื่āļ­āđ€āļ‚้āļē Dashboard āļˆึāļ‡āđ‚āļŦāļĨāļ”āļ‚้āļ­āļĄูāļĨ Dashboard

āđ€āļĄื่āļ­āđ€āļ‚้āļēāđ€āļĄāļ™ูāļĢāļēāļĒāļ‡āļēāļ™ āļˆึāļ‡āđ€āļ•āļĢีāļĒāļĄāļ‚้āļ­āļĄูāļĨāļŠāļģāļŦāļĢัāļšāļĢāļēāļĒāļ‡āļēāļ™

āđ€āļĄื่āļ­āļāļ”āđāļŠāļ”āļ‡āļĢāļēāļĒāļ‡āļēāļ™ āļˆึāļ‡āđ€āļĢีāļĒāļ

google.script.run
  .withSuccessHandler(function(data) {

    renderReportPreview(data);

  })
  .withFailureHandler(function(error) {

    Swal.fire({
      icon: 'error',
      title: 'āđ€āļิāļ”āļ‚้āļ­āļœิāļ”āļžāļĨāļēāļ”',
      text: error.message
    });

  })
  .getReportData(filters);

āđ„āļĄ่āļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āđ‚āļŦāļĨāļ”āļ‚้āļ­āļĄูāļĨāļ—ั้āļ‡āļŦāļĄāļ”āđƒāļŦāļĄ่āļ—ุāļāļ„āļĢั้āļ‡āļ—ี่āđ€āļ›āļĨี่āļĒāļ™āļŦāļ™้āļē


ðŸ–Ļ️ āļ•ัāļ§āļ­āļĒ่āļēāļ‡āđ‚āļ„้āļ”āļžิāļĄāļž์āļĢāļēāļĒāļ‡āļēāļ™

āđ€āļĄื่āļ­āļŠāļĢ้āļēāļ‡ Preview āđāļĨ้āļ§ āļŠāļēāļĄāļēāļĢāļ–āļ™āļģ HTML āļ—ี่āđāļŠāļ”āļ‡āļ­āļĒู่āļšāļ™āļŦāļ™้āļēāļˆāļ­āđ„āļ›āļŠāļĢ้āļēāļ‡āļŦāļ™้āļēāļžิāļĄāļž์āđƒāļŦāļĄ่

function printReport() {

  const preview =
    document.getElementById('reportPreview');

  if (!preview) {
    return;
  }

  const printWindow =
    window.open(
      '',
      '_blank',
      'width=1200,height=800'
    );

  printWindow.document.write(`
    <!DOCTYPE html>
    <html lang="th">

    <head>

      <meta charset="UTF-8">

      <title>
        āļĢāļēāļĒāļ‡āļēāļ™āļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē
      </title>

      <style>

        @page {
          size: A4 portrait;
          margin: 10mm;
        }

        body {
          font-family: 'Sarabun', sans-serif;
          font-size: 11px;
        }

        table {
          width: 100%;
          border-collapse: collapse;
        }

        th,
        td {
          border: 1px solid #444;
          padding: 5px;
        }

        thead {
          display: table-header-group;
        }

        tr {
          page-break-inside: avoid;
        }

      </style>

    </head>

    <body>

      ${preview.innerHTML}

      <script>

        window.onload = function() {

          setTimeout(function() {
            window.print();
          }, 400);

        };

      <\/script>

    </body>

    </html>
  `);

  printWindow.document.close();
}

🗂️ āđ‚āļ„āļĢāļ‡āļŠāļĢ้āļēāļ‡āđ„āļŸāļĨ์āđ‚āļ›āļĢāđāļāļĢāļĄ

āđ‚āļ›āļĢāđ€āļˆ็āļāļ•์āđāļš่āļ‡āļ­āļ­āļāđ€āļ›็āļ™ 4 āđ„āļŸāļĨ์āļŦāļĨัāļ

Scholarship Management System
│
├── code.gs
│
├── index.html
│
├── javascript.html
│
└── style.html

code.gs

āļ—āļģāļŦāļ™้āļēāļ—ี่āđ€āļ›็āļ™ Backend āđ€āļŠ่āļ™

  • āļ•ิāļ”āļ•่āļ­ Google Sheets
  • CRUD
  • āļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļĨāļ°āļŠāļĢ้āļēāļ‡ Sheet
  • Login
  • Settings
  • Options
  • Dashboard
  • Report

index.html

āđ€āļ›็āļ™āđ‚āļ„āļĢāļ‡āļŠāļĢ้āļēāļ‡āļŦāļ™้āļēāļˆāļ­ āđ€āļŠ่āļ™

  • Sidebar
  • Dashboard
  • Form
  • Table
  • Report Preview
  • Modal
  • Loading

javascript.html

āļ„āļ§āļĢāļĄีāđāļ—็āļ

<script>

  // JavaScript āļ‚āļ­āļ‡āļĢāļ°āļšāļš

</script>

āļ—āļģāļŦāļ™้āļēāļ—ี่āļ„āļ§āļšāļ„ุāļĄ

  • āļāļēāļĢāđ€āļ›āļĨี่āļĒāļ™āļŦāļ™้āļē
  • Form
  • CRUD
  • Loading
  • SweetAlert2
  • Report
  • Print
  • Settings

style.html

āđƒāļŠ้āļŠāļģāļŦāļĢัāļš CSS āļ‚āļ­āļ‡āļĢāļ°āļšāļš āđ€āļŠ่āļ™

  • Dashboard
  • Sidebar
  • Card
  • Responsive
  • Loading Animation
  • Report A4
  • Print Preview


🚀 āļ§ิāļ˜ีāļŠāļĢ้āļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ

āļ‚ั้āļ™āļ•āļ­āļ™āļ—ี่ 1

āļŠāļĢ้āļēāļ‡ Google Sheets āđƒāļŦāļĄ่āļŠāļģāļŦāļĢัāļšāđƒāļŠ้āđ€āļ›็āļ™āļāļēāļ™āļ‚้āļ­āļĄูāļĨ

āļˆāļēāļāļ™ั้āļ™āđ€āļĨืāļ­āļ

āļŠ่āļ§āļ™āļ‚āļĒāļēāļĒ → Apps Script


āļ‚ั้āļ™āļ•āļ­āļ™āļ—ี่ 2

āļŠāļĢ้āļēāļ‡āđ„āļŸāļĨ์āļˆāļģāļ™āļ§āļ™ 4 āđ„āļŸāļĨ์

code.gs
index.html
javascript.html
style.html

āđāļĨ้āļ§āļ™āļģ Source Code āļ‚āļ­āļ‡āđāļ•่āļĨāļ°āđ„āļŸāļĨ์āđ„āļ›āļ§āļēāļ‡āđƒāļŦ้āļ•āļĢāļ‡āļัāļ™


āļ‚ั้āļ™āļ•āļ­āļ™āļ—ี่ 3

āļĢัāļ™āļŸัāļ‡āļ์āļŠัāļ™

setupSystem();

āļ„āļĢั้āļ‡āđāļĢāļāđ€āļžีāļĒāļ‡āļ„āļĢั้āļ‡āđ€āļ”ีāļĒāļ§

Google āļˆāļ°āļ‚āļ­āļŠิāļ—āļ˜ิ์āļāļēāļĢāđ€āļ‚้āļēāļ–ึāļ‡ Spreadsheet āđƒāļŦ้āļ”āļģāđ€āļ™ิāļ™āļāļēāļĢāļ­āļ™ุāļāļēāļ•

āļŦāļĨัāļ‡āļˆāļēāļāļ™ั้āļ™āļĢāļ°āļšāļšāļˆāļ°āļŠāļĢ้āļēāļ‡ Sheet āļ—ี่āļˆāļģāđ€āļ›็āļ™āđƒāļŦ้āļ­ัāļ•āđ‚āļ™āļĄัāļ•ิ


āļ‚ั้āļ™āļ•āļ­āļ™āļ—ี่ 4

Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ

āđ€āļĨืāļ­āļ

Deploy → New deployment

āļˆāļēāļāļ™ั้āļ™āđ€āļĨืāļ­āļ

Type:
Web app

Execute as:
Me

Who has access:
Anyone

āļāļ” Deploy

āļˆāļēāļāļ™ั้āļ™āļ™āļģ URL Web App āđ„āļ›āđ€āļ›ิāļ”āđƒāļŠ้āļ‡āļēāļ™


ðŸ“ą āļĢāļ­āļ‡āļĢัāļšāļāļēāļĢāđƒāļŠ้āļ‡āļēāļ™āļšāļ™āļĄืāļ­āļ–ืāļ­

āļŦāļ™้āļēāđ€āļ§็āļšāđƒāļŠ้ Responsive Layout āļ—āļģāđƒāļŦ้āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ้āļ‡āļēāļ™āļœ่āļēāļ™

  • Desktop
  • Notebook
  • Tablet
  • Smartphone

āđ„āļ”้āļˆāļēāļ URL āđ€āļ”ีāļĒāļ§āļัāļ™

āđ€āļŦāļĄāļēāļ°āļัāļšāļĢāļ°āļšāļšāđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™āļ—ี่āļ„āļĢูāļŦāļĢืāļ­āđ€āļˆ้āļēāļŦāļ™้āļēāļ—ี่āļ­āļēāļˆāļ•้āļ­āļ‡āļšัāļ™āļ—ึāļāļ‚้āļ­āļĄูāļĨāļœ่āļēāļ™āđ‚āļ—āļĢāļĻัāļžāļ—์āļĄืāļ­āļ–ืāļ­


📚 āļˆุāļ”āđ€āļ”่āļ™āļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠ้ Google Apps Script

āļāļēāļĢāļžัāļ’āļ™āļēāļĢāļ°āļšāļšāđƒāļ™āļĨัāļāļĐāļ“āļ°āļ™ี้āđ€āļŦāļĄāļēāļ°āļัāļšāļŠāļ–āļēāļ™āļĻึāļāļĐāļē āđ€āļžāļĢāļēāļ°āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ้āļšāļĢิāļāļēāļĢāđƒāļ™ Google Workspace āļ—ี่āļĄีāļ­āļĒู่āđāļĨ้āļ§āļĄāļēāļ›āļĢāļ°āļĒุāļāļ•์āđ„āļ”้

  • āđ„āļĄ่āļ•้āļ­āļ‡āļ•ิāļ”āļ•ั้āļ‡ Web Server āđ€āļžิ่āļĄ
  • āđ„āļĄ่āļ•้āļ­āļ‡āļŠāļĢ้āļēāļ‡ MySQL Server
  • āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ้
  • Google Sheets āđ€āļ›็āļ™āļāļēāļ™āļ‚้āļ­āļĄูāļĨ
  • āļžāļĢ้āļ­āļĄāļžัāļ’āļ™āļē Web Application āļ”้āļ§āļĒ
  • Google Apps Script

āļ—āļģāđƒāļŦ้āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢ้āļēāļ‡āļĢāļ°āļšāļšāļ‡āļēāļ™āļ‚āļ™āļēāļ”āđ€āļĨ็āļāļ–ึāļ‡āļ‚āļ™āļēāļ”āļāļĨāļēāļ‡āļŠāļģāļŦāļĢัāļšāđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™āđ„āļ”้āļ„่āļ­āļ™āļ‚้āļēāļ‡āļĢāļ§āļ”āđ€āļĢ็āļ§


ðŸ’Ą āļŠāļēāļĄāļēāļĢāļ–āļžัāļ’āļ™āļēāļ•่āļ­āļĒāļ­āļ”āļ­āļ°āđ„āļĢāđ„āļ”้āļ­ีāļ?

āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžิ่āļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ•่āļ­āđ„āļ›āđ„āļ”้āļ­ีāļ āđ€āļŠ่āļ™

  • 📷 āļĢูāļ›āļ™ัāļāđ€āļĢีāļĒāļ™
  • 📎 āđāļ™āļšāđ€āļ­āļāļŠāļēāļĢāļ›āļĢāļ°āļāļ­āļšāļāļēāļĢāļ‚āļ­āļ—ุāļ™
  • ☁️ āļ­ัāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨ์āđ€āļ‚้āļē Google Drive
  • ✍️ āļĨāļēāļĒāđ€āļ‹็āļ™āļĢัāļšāđ€āļ‡ิāļ™āļ—ุāļ™
  • 📄 āļŠāļĢ้āļēāļ‡ PDF āļ­ัāļ•āđ‚āļ™āļĄัāļ•ิ
  • 📊 āļāļĢāļēāļŸāļŠāļĢุāļ›āļ—ุāļ™āđāļĒāļāļ•āļēāļĄāļ›ี
  • ðŸŦ āļŠāļĢุāļ›āļ—ุāļ™āđāļĒāļāļĢāļ°āļ”ัāļšāļŠั้āļ™
  • ðŸ‘Ļ‍🎓 āļ›āļĢāļ°āļ§ัāļ•ิāļāļēāļĢāđ„āļ”้āļĢัāļšāļ—ุāļ™āļĢāļēāļĒāļšุāļ„āļ„āļĨ
  • 🔔 āļĢāļ°āļšāļšāđāļˆ้āļ‡āđ€āļ•ืāļ­āļ™
  • ðŸ“ą LINE Chatbot
  • 📧 Email Notification
  • 🔐 āđāļĒāļāļŠิāļ—āļ˜ิ์ āļ„āļĢู / āđ€āļˆ้āļēāļŦāļ™้āļēāļ—ี่ / āļœู้āļšāļĢิāļŦāļēāļĢ / Admin
  • 📑 Export Excel / PDF
  • 🔎 āļ„้āļ™āļŦāļēāļ™ัāļāđ€āļĢีāļĒāļ™āļˆāļēāļāļāļēāļ™āļ‚้āļ­āļĄูāļĨāļ™ัāļāđ€āļĢีāļĒāļ™āļ‚āļ­āļ‡āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™


❤️ āļŠāļĢุāļ›

Scholarship Management System – āļĢāļ°āļšāļšāļšัāļ™āļ—ึāļāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē

āđ€āļ›็āļ™āļ­ีāļāļŦāļ™ึ่āļ‡āļ•ัāļ§āļ­āļĒ่āļēāļ‡āļ‚āļ­āļ‡āļāļēāļĢāļ™āļģ Google Apps Script āļĄāļēāļ›āļĢāļ°āļĒุāļāļ•์āđƒāļŠ้āļัāļšāļ‡āļēāļ™āļšāļĢิāļŦāļēāļĢāļˆัāļ”āļāļēāļĢāļ āļēāļĒāđƒāļ™āļŠāļ–āļēāļ™āļĻึāļāļĐāļē āđ‚āļ”āļĒāļĢāļ§āļšāļĢāļ§āļĄāļ•ั้āļ‡āđāļ•่āļāļēāļĢāļšัāļ™āļ—ึāļāļ—ุāļ™ āļšัāļ™āļ—ึāļāļœู้āļĢัāļšāļ—ุāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚้āļ­āļĄูāļĨ āļŠāļĢุāļ›āļĒāļ­āļ” āđ„āļ›āļˆāļ™āļ–ึāļ‡āļāļēāļĢāļˆัāļ”āļ—āļģāļĢāļēāļĒāļ‡āļēāļ™āđāļĨāļ°āļžิāļĄāļž์āđ€āļ­āļāļŠāļēāļĢ

āđāļ™āļ§āļ„ิāļ”āļŠāļģāļ„ัāļāļ„ืāļ­

“āļšัāļ™āļ—ึāļāļ„āļĢั้āļ‡āđ€āļ”ีāļĒāļ§ āļ„้āļ™āļŦāļēāđ„āļ”้ āļŠāļĢุāļ›āđ„āļ”้ āđāļĨāļ°āļžิāļĄāļž์āļĢāļēāļĒāļ‡āļēāļ™āđ„āļ”้āļˆāļēāļāļĢāļ°āļšāļšāđ€āļ”ีāļĒāļ§”

āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢัāļšāļ™āļģāđ„āļ›āļĻึāļāļĐāļē āļžัāļ’āļ™āļēāļ•่āļ­ āđāļĨāļ°āļ›āļĢัāļšāđƒāļŦ้āļ•āļĢāļ‡āļัāļšāļĢูāļ›āđāļšāļšāļāļēāļĢāļšāļĢิāļŦāļēāļĢāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļēāļ‚āļ­āļ‡āđāļ•่āļĨāļ°āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™


ðŸ’ŧ āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒีāļ—ี่āđƒāļŠ้

Google Apps Script
Google Sheets
HTML5
CSS3
JavaScript
Bootstrap 5
SweetAlert2
Bootstrap Icons


📌 āļŦāļĄāļēāļĒāđ€āļŦāļ•ุ

Source Code āļ•ัāļ§āđ€āļ•็āļĄāļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ›āļĢāļ°āļāļ­āļšāļ”้āļ§āļĒ

1. code.gs — Backend / Google Sheets / CRUD / Settings / Report
2. index.html — āļŦāļ™้āļē Web Application
3. javascript.html — JavaScript āļั่āļ‡ Client
4. style.html — CSS / Responsive / Dashboard / Print

āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ‚āļ„āļĢāļ‡āļŠāļĢ้āļēāļ‡āđ„āļ›āļ›āļĢัāļšāđƒāļŠ้āļัāļšāļĢāļ°āļšāļšāļ‡āļēāļ™āļ­ื่āļ™āđƒāļ™āđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™āđ„āļ”้ āđ€āļŠ่āļ™ āļĢāļ°āļšāļšāļ—ุāļ™āļ›ัāļˆāļˆัāļĒāļžื้āļ™āļāļēāļ™ āļĢāļ°āļšāļšāļŠ่āļ§āļĒāđ€āļŦāļĨืāļ­āļ™ัāļāđ€āļĢีāļĒāļ™ āļĢāļ°āļšāļšāļŠāļ§ัāļŠāļ”ิāļāļēāļĢ āļŦāļĢืāļ­āļĢāļ°āļšāļšāļ•ิāļ”āļ•āļēāļĄāļāļēāļĢāļĢัāļšāđ€āļ‡ิāļ™āļŠāļ™ัāļšāļŠāļ™ุāļ™

#GoogleAppsScript #GoogleSheets #WebApp #āļĢāļ°āļšāļšāļ—ุāļ™āļāļēāļĢāļĻึāļāļĐāļē #ScholarshipManagementSystem #āļĢāļ°āļšāļšāđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™ #āļ„āļĢูāļĒุāļ„āļ”ิāļˆิāļ—ัāļĨ #CodingForTeacher #āļĢāļ°āļšāļšāļŠāļēāļĢāļŠāļ™āđ€āļ—āļĻāđ‚āļĢāļ‡āđ€āļĢีāļĒāļ™ #Bootstrap5 #JavaScript

āđāļŠāļ”āļ‡āļ„āļ§āļēāļĄāļ„ิāļ”āđ€āļŦ็āļ™ (0)
āđƒāļŦāļĄ่āļāļ§่āļē āđ€āļ่āļēāļāļ§่āļē