Giáo án link (giaoan.link) chia sẻ đến các bạn project về Google sheet Apps script App web tạo Dropdown phụ thuộc 3 cấp Dependent dropdown. Các bạn có thể thực hiện thông qua video hướng dẫn bên dưới cùng đoạn code apps script mẫu.
Các bài thực hành excel khác:
- Googlesheet Apps script Webapp | Tạo trang trắc nghiệm online như Quiz
- Google sheet Apps script | Trang trắc nghiệm Quiz – Cập nhật câu hỏi, trả lời, thời gian đếm ngược
- Google sheets | Number to text, Hàm đọc số thành chữ Ứng dụng taoh hóa đơn, phiếu chi.
- Googlesheet Apps script Webapp | Tạo mã QR Code từ nội dung nhập vào – QR Code Generator
- Google sheet apps script | Dropdown đơn giản lấy dữ liệu từ google sheet – Simple dropdown
- Apps script Webapp CSS – HTML – JS | Tạo ứng dụng Ghi chú trên nền tảng webapp – website
- Google sheet Apps script | Hàm setTimeout định thời gian xóa các trường Input khi click Button
- Apps script Webapp | Sử dụng CSS tạo hiệu ứng sóng nước – Trang trí đẹp mắt cho web và blog.
- Google sheet Apps script Tiện ích tạo mã vạch (barcode) trên webapp
- Google sheet, apps script, webapp | Load và Hiển thị biểu đồ theo năm chọn từ List box
Code Apps Script
--Code.gs--
function doGet(e) {
return HtmlService.createTemplateFromFile("form").evaluate()
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
function getObject(){
const obj={}
const id = '11KQ_7eCKvTyZiQgKQsdkw-ZPeL6FwNaj7efhS2J4yW8';
const name = 'Options';
const data = SpreadsheetApp.openById(id).getSheetByName(name).getDataRange().getDisplayValues().slice(1);
data.forEach( ([subjectKey, topicKey, chapter]) => {
const subject = obj[subjectKey]
if(!subject){
obj[subjectKey] = {}
obj[subjectKey][topicKey] = [chapter]
}else{
const topic = subject[topicKey]
if(!topic){
subject[topicKey] = [chapter]
}else{
topic.push(chapter)
}
}
})
return obj;
}
function save(data) {
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/11KQ_7eCKvTyZiQgKQsdkw-ZPeL6FwNaj7efhS2J4yW8/edit#gid=0");
var sheet = ss.getSheetByName("Data");
var date = new Date().toLocaleDateString('vi-VN');
sheet.appendRow([data.sub, data.tp, data.ch, data.inp,date])
return true;
}
--Formm.html--
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<?!=include("CSS")?>
</head>
<body>
<div class="container mt-2">
<div>
<h3>VÍ DỤ VỀ DROPDOWN PHỤ THUỘC<br>Denpendent Dropdown</h3>
<div class="col-12 mb-3 mt-5">
<h5 style="color: red">Loại sách:</h5>
<select class="form-control" name="subject" id="subject">
<option values="" selected="selected">Chọn thể loại sách</option>
</select>
</div>
<div class="col-12 mb-3">
<h5 style="color: blue">Khối lớp:</h5>
<select class="form-control" name="topic" id="topic">
<option value="" selected="selected">Vui lòng chọn Thể loại sách trước</option>
</select>
</div>
<div class="col-12 mb-3">
<h5 style="color: green">Môn học:</h5>
<select class="form-control" name="chapter" id="chapter">
<option value="" selected="selected">Vui lòng chọn Khối lớp trước</option>
</select>
</div>
<div class="col-12 mb-3">
<h5 style="color: brown">Để lại lời nhắn:</h5>
<textarea class="form-control" id="input4" placeholder="Ghi nội dung..."></textarea>
</div>
<div class="col-12 mb-3">
<button class="btn btn-primary" id="submit">SUBMIT</button>
</div>
</div>
</div>
<?!=include("Javascript")?>
</body>
</html>
---Javascript---
<script>
window.onload = () =>{
google.script.run.withSuccessHandler(loadObject).getObject();
}
const loadObject = function(subjectObject) {
var subjectSel = document.getElementById("subject");
var topicSel = document.getElementById("topic");
var chapterSel = document.getElementById("chapter");
for (var x in subjectObject) {
subjectSel.options[subjectSel.options.length] = new Option(x, x);
}
subjectSel.onchange = function() {
//empty Chapters- and Topics- dropdowns
chapterSel.length = 1;
topicSel.length = 1;
//display correct values
for(var y in subjectObject[this.value]){
topicSel.options[topicSel.options.length] = new Option (y, y);
}
}
topicSel.onchange = function() {
//empty Chapters dropdown
chapterSel.length = 1;
//display correct values
var z = subjectObject[subjectSel.value][this.value];
for(var i = 0; i < z.length; i++) {
chapterSel.options[chapterSel.options.length] = new Option(z[i], z[i]);
}
}
}
var subj = document.getElementById("subject");
var tpc = document.getElementById("topic");
var chapt = document.getElementById("chapter");
var inp4 = document.getElementById("input4");
document.getElementById("submit").addEventListener("click", saveData);
function saveData(){
var data ={
sub: subj.value,
tp: tpc.value,
ch: chapt.value,
inp: inp4.value
};
google.script.run.withSuccessHandler(afterSubmit).save(data);
}
function afterSubmit() {
subj.selectedIndex = 0;
tpc.selectedIndex = 0;
chapt.selectedIndex = 0;
inp4.value = "";
}
</script>
----CSS----
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
<style>
body {
font-family: 'Tahoma';
}
.container {
max-width: 500px;
margin: auto;
background: white;
padding: 10px;
}
h3{text-align: center;}
</style>