Thời gian dùng thử đã hết!
Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền để tiếp tục sử dụng hệ thống.
Bài 18. Sổ Đầu Bài: Tra cứu, Lọc dữ liệu & Chỉnh sửa
Mục tiêu: Sau khi Sổ đầu bài đã có dữ liệu, bài toán tiếp theo của người quản trị mạng là cung cấp công cụ để:
1. Giám thị có thể chọn một Lớp cụ thể và một Tuần/Ngày cụ thể để kiểm tra.
2. Nếu Giáo viên nhập nhầm tên bài dạy (VD: Nhập nhầm bài "Hàm số" thành "Đạo hàm" môn Toán), họ có quyền click vào dòng đó để Cập nhật (Update) lại dữ liệu trên Sheets thay vì tạo dòng mới.
1. Mã nguồn Back-end (Code.gs)
Để tìm kiếm dữ liệu hiệu quả, chúng ta sử dụng hàm filter() của JavaScript để lọc mảng 2 chiều lấy ra các dòng khớp với tiêu chí "Lớp" và "Ngày".
// 1. Hàm Tra cứu (Filter) Sổ đầu bài theo Lớp và NgàyfunctiontraCuuSoDauBai(lopCanTim,ngayCanTim) {letsheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SoDauBai");letdata= sheet.getDataRange().getValues();// Lấy toàn bộ bảng// Bỏ dòng tiêu đề bằng slice(1)letketQua= [];for(leti = 1; i < data.length; i++) {letrow = data[i];letngayDay = row[1];// Cột B: Ngày dạy (chuỗi dd/MM/yyyy)lettenLop = row[2];// Cột C: Tên lớp// Nếu khớp tiêu chí lọc (hoặc người dùng để trống tiêu chí)if((lopCanTim ===""|| tenLop === lopCanTim) && (ngayCanTim ===""|| ngayDay === ngayCanTim)) {// Đẩy thêm rowIndex vào mảng để phục vụ tính năng Update về saurow.push(i + 1); ketQua.push(row); } }returnketQua; }// 2. Hàm Cập nhật (Update) một tiết học bị saifunctioncapNhatTietHoc(rowIndex,baiDayMoi,xepLoaiMoi) {letsheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SoDauBai");// Ghi đè vào Cột F (cột 6 - Bài dạy) và Cột G (cột 7 - Xếp loại)sheet.getRange(rowIndex, 6).setValue(baiDayMoi); sheet.getRange(rowIndex, 7).setValue(xepLoaiMoi);return"Cập nhật thành công!"; }
- Tại hàm
traCuuSoDauBai, lệnh row.push(i + 1) là một "thủ thuật" rất quan trọng. Mảng dữ liệu ban đầu chỉ có từ Cột A đến Cột H. Ta chủ động nhét thêm số thứ tự dòng (Index của Google Sheets, bắt đầu từ 1) vào cuối mảng. Mục đích là khi hiển thị lên giao diện HTML, ta biết chính xác dòng dữ liệu này nằm ở Hàng số mấy trên Google Sheets, từ đó mới truyền cái RowIndex này cho hàm capNhatTietHoc thực hiện ghi đè.
2. Giao diện Người dùng (Front-end SPA)
Thực hành Mô phỏng: Tra cứu & Quản lý Sổ Đầu Bài
(Trường THPT Phan Chu Trinh - Ayun Pa, Gia Lai. Dữ liệu chạy mô phỏng không cần tải lại trang).