Nội dung
Gần đây mình có nhận được yêu cầu thêm những chức năng cần thiết cho 1 Form nhập liệu đơn giản. Về cơ bản, bài này ứng dụng nhiều kĩ năng chuyển đổi từ cột sang hàng, và đổi từ hàng sang cột bằng App Script. Sau đây là những chức năng của form đó:
- Cho sẵn 1 form điền dữ liệu gồm 19 dòng
- Kiểm tra: kiểm tra các ô bắt buộc nhập, nếu chưa nhập – ghi “Chưa nhập”, nếu đã nhập – ghi “OK”
- Nhập mới: nhập data mới, sau đó lưu vào sheet database
- Sửa cũ: lấy data trong database ra sửa, sau khi sửa có thể chọn tiếp Lưu cũ (update database), hoặc Lưu mới (tạo 1 bản ghi mới trong database)

File tham khảo
https://docs.google.com/spreadsheets/d/1OGq_zz0cMz7bmVpRN6dZHqIAW1BBX0t_v4TwFJ8UYck/edit?usp=sharing
Lưu ý: để xem, chỉnh sửa file và code, các bạn vui lòng chọn File (tệp) -> Make a copy (copy) để Copy file vào Google Drive của các bạn nhé.
Chú thích
- Trong file Google Sheet, các bạn kéo xuống dưới sẽ thấy phần chú thích từng ô, dải ô và cột cho file
- Sheet “Nguon” dùng để chứa form nhập liệu, cũng như để thực hiện các chức năng như lưu cũ, lưu mới, hay kiểm tra
- Sheet “Dich” chứa database
Nhập mới
- Nhập dữ liệu mới trong F3:F21
- Lưu ý: khi ô H1 bỏ trống, bạn sẽ không thể điền thêm data mới nào
Toàn bộ code cho Form nhập liệu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | function onEdit() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); var dich = ss.getSheetByName("Dich"); var h1 = nguon.getRange("H1").getValue(); var i1 = nguon.getRange("I1").getValue(); if (h1 == "Kiểm tra") { kiemtra(); } if (h1 == "Chuyển") { chuyen(); xoahet(); } if (h1 == "Sửa cũ") { sua(); } if (i1 == "Bắt đầu sửa") { nguon.getRange("H1").setValue("Nhập mới"); } if (i1 == "Lưu cũ") { luucu(); xoahet(); } if (i1 == "Lưu mới") { chuyen(); xoahet(); } if (h1 == "") { xoahet(); } } function kiemtra() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); var batnhap = nguon.getRange("G3:G21").getValues(); var content = nguon.getRange("F3:F21").getValues(); var ketqua = []; var j = 0; for (var i = 0; i < batnhap.length; i++) { if (batnhap[i] == "*" && content[i] == "") { ketqua[j] = ["Chưa nhập"]; j++; } else { ketqua[j] = ["OK"]; j++; } } nguon.getRange("H3:H21").setValues(ketqua); } function chuyen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); var dich = ss.getSheetByName("Dich"); var nguonContent = nguon.getRange("F3:F21").getValues(); dich.getRange(dich.getLastRow() +1, 2, 1, 19).setValues([nguonContent]); dich.getRange(dich.getLastRow(), 1).setValue(dich.getRange(dich.getLastRow()-1, 1).getValue()+1); } function sua() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); var dich = ss.getSheetByName("Dich"); var socansua = nguon.getRange("E1").getValue(); var contentdich = dich.getRange(socansua +1, 2, 1, 19).getValues(); var contentSua = []; //tao xac thuc var rule = SpreadsheetApp.newDataValidation().requireValueInList(["Bắt đầu sửa","Lưu cũ","Lưu mới"]).build(); nguon.getRange("I1").setDataValidation(rule); //chuyen doi for (var i = 0; i < 19; i++) { contentSua.push([contentdich[0][i]]); } nguon.getRange("F3:F21").setValues(contentSua); } function luucu() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); var dich = ss.getSheetByName("Dich"); var stt = nguon.getRange("E1").getValue(); var nguonContent = nguon.getRange("F3:F21").getValues(); dich.getRange(stt+1, 2, 1, 19).setValues([nguonContent]); } function xoahet() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var nguon = ss.getSheetByName("Nguon"); nguon.getRange("E1").clearContent(); nguon.getRange("F3:F21").clearContent(); nguon.getRange("H:H").clearContent(); nguon.getRange("I1").clearContent(); nguon.getRange("I1").clearDataValidations(); } |
Need Help?
Khi lập trình App Script cho Google Sheet, nếu các bạn có bất kì thắc mắc nào thì có thể gửi câu hỏi về HocGgSheet.com qua biểu mẫu:
https://goo.gl/forms/K1RRnbtPU2M9J80r2
Hoặc có thể trực tiếp để lại comment ở bài post sau:
Cám ơn bạn nhiều.
Bạn cho mình hỏi sao đoạn CODE này mình làm ko ra tự đánh số.
Kết quả nó ra là
1 – dòng trên
11 – dòng dưới
111 – dòng kế tiếp
dich.getRange(dich.getLastRow(), 1).setValue(dich.getRange(dich.getLastRow()-1, 1).getValue()+1);
Bạn cho mình hỏi thêm ví dụ mình đã có dữ liệu NV1, mình muốn kế tiếp khi mình nhập nhân viên mới vào nó tự đánh STT là “NV2” tiếp theo thì mình CODE như thế nào?
Cám ơn bạn rất nhiều.
Bạn thử sửa thành như thế này nhé
dich.getRange(dich.getLastRow(), 1).setValue(dich.getRange(dich.getLastRow()-1, 1).getValue()+”1″);