Bài 12: Liên kết Google Form – Sheet – Apps Script

Google Form và Google Sheet là 2 dịch vụ quá đỗi thân thuộc với người dùng. Nhưng còn liên kết chúng với Apps Script và ứng dụng trong thực tiễn như thế nào thì hôm nay HocGgSheet.com sẽ giới thiệu đến với các bạn.

File luyện tập

Tạo bản sao về Drive của bạn để xem và chỉnh sửa code nhé

https://docs.google.com/spreadsheets/d/1oUruazoQd4l5dQBy97-HpNCsxV2Rminy25yjpu4mnJw/edit?usp=sharing

Google Form:
https://goo.gl/forms/AV4rw3fhxqYjfWFF3

Mô tả ví dụ và Chuẩn bị

Google form

Cho 1 form đơn giản như hình trên và liên kết với sheet “answer” trong file Google Sheet như sau (có sẵn một vài mẫu):

Liên kết Google Form và Google Sheet

Ở file Google Sheet, mình tạo thêm 1 sheet tên là “database”, 2 cột “Phê duyệt” và “Ngày chỉnh sửa”. Mục đích của chúng là:

  • Phê duyệt: Mỗi khi chọn “Duyệt” hoặc “Không duyệt” thì dòng đó sẽ được chuyển sang “database”. Ví dụ, chọn C6 là “Duyệt”, thì ta sẽ di chuyển dòng 6 sang “database”
  • Ngày chỉnh sửa: Mỗi khi chọn giá trị “Phê duyệt”, thời điểm bao gồm ngày và giờ hiện tại sẽ được cập nhật ghi ra vào ô cùng hàng trong cột D

Xác thực dữ liệu cho cột C “Phê duyệt”

Ta thấy “Phê duyệt” có 2 giá trị là “Duyệt” và “Không duyệt”. Vậy nên có thể xác thực dữ liệu cho nó

Xác thực dữ liệu cho Phê duyệt
Xác thực dữ liệu cho “Phê duyệt”

Các bạn lưu ý, chúng ta không cần Xác thực cho cả cột C. Mà chỉ cần Xác thực cho Những dòng hiện cóDòng trắng tiếp theo. Ví dụ, mình có 9 dòng đầu là Những dòng hiện có, vậy thì chỉ cần Xác thực cho 9 dòng đó và dòng thứ 10. Mục đích là để khi có người gửi form mới, bản ghi mới sẽ tự động lấy định dạng (xác thực) của dòng trước

Code hoàn chỉnh

Giải thích

1. Biến toàn cục

  • answer là sheet “answer”
  • dbsheet là sheet “database”
  • activeCell là ô chúng ta đang bấm vào

2. Chương trình chính

Sử dụng trigger onEdit() để khi thay đổi giá trị ở cột “Phê duyệt” thì sẽ tiến hành chạy chương trình

“Phê duyệt” nằm ở cột C, tức cột 3, và nếu nó bằng “Duyệt” hoặc “Không duyệt” thì sẽ lưu bản ghi vào trong database

Đây là cách để lấy thời điểm hiện tại ra và ghi vào ô bên cột D. Hàm offset có chức năng dóng hàng dóng cột. Ở đây, nó dóng sang ô cùng hàng với activeCell bên cột D

3 câu lệnh cuối là kỹ thuật Di chuyển dòng từ sheet này sang sheet khác

Biến luu dùng để ghi giá trị của dải ô bao gồm các ô cùng hàng với activeCell

Dòng này để ghi dải ô của biến luu vào Dòng cuối cùng tiếp theo trong sheet “database”

Sau cùng là xóa dòng đã duyệt bên sheet “answer”

Ứng dụng Liên kết Form – Sheet – Apps Script

Các bạn có thể ứng dụng ví dụ trên vào các trường hợp sau:

  • Xử lí dữ liệu văn phòng
  • Tạo Cơ sở dữ liệu (Database)
  • Xét duyệt nội dung

2 COMMENTS

  1. nếu mình muốn bên cột xét duyệt chọn “không duyệt” thì dữ liệu ko chuyển qua sheet database thì làm thế nào bạn

    • 3 câu lệnh cuối là kỹ thuật Di chuyển dòng từ sheet này sang sheet khác
      Nếu không cần thì bạn chỉ cần xóa 3 dòng này đi thôi nhé:
      var luu = answer.getRange(activeCell.getRow(), 1, 1, 4).getValues();
      dbSheet.getRange(dbSheet.getLastRow()+1, 1, 1, 4).setValues(luu);
      answer.deleteRow(activeCell.getRow());

Leave a Reply