Chèn gg form vào sheet

Khi gửi biểu mẫu, bạn có thể thu thập các câu trả lời trong biểu mẫu hoặc riêng biệt trong Google Trang tính.

Chọn vị trí lưu trữ câu trả lời

Lưu ý quan trọng: Nếu bạn đã chia sẻ biểu mẫu với một cộng tác viên, thì họ cũng có thể truy cập vào bảng tính liên kết của biểu mẫu đó. Nếu muốn loại bỏ một cộng tác viên, bạn phải loại họ khỏi biểu mẫu và bảng tính một cách riêng biệt.

Mẹo: Bạn có thể tìm bảng tính chứa câu trả lời trong màn hình chính của Google Sheets, ứng dụng Google Trang tính hoặc trong Google Drive.

Hủy liên kết bảng tính khỏi biểu mẫu của bạn

Xóa biểu mẫu hoặc câu trả lời

Mẹo: Nếu lưu giữ câu trả lời trong bảng tính, bạn sẽ có một tệp riêng biệt trong Google Drive. Bạn có thể xóa bảng tính hoặc biểu mẫu mà không xóa tệp liên kết khác. Nếu xóa câu trả lời nào trong biểu mẫu, thì bạn không thể hủy hành động này sau khi đã thực hiện.

Xóa tất cả câu trả lời khỏi biểu mẫu

Xóa từng câu trả lời 

Mẹo: Nếu bạn lưu trữ câu trả lời trong Google Trang tính, thì việc xóa một câu trả lời khỏi biểu mẫu hoặc trang tính sẽ không ảnh hưởng đến những câu trả lời khác.

Thông tin này có hữu ích không?

Chúng tôi có thể cải thiện trang này bằng cách nào?

  • File luyện tập
  • Mô tả ví dụ và Chuẩn bị
  • Xác thực dữ liệu cho cột C “Phê duyệt”
  • Code hoàn chỉnh
  • Giải thích
  • 1. Biến toàn cục
  • 2. Chương trình chính
  • Ứng dụng Liên kết 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ị

Chèn gg form vào sheet

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):

Chèn gg form vào 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ó

Chèn gg form vào sheet
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ó và 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

functiononEdit(){

   varss=SpreadsheetApp.getActiveSpreadsheet();

   varanswer= ss.getSheetByName('answer');

   vardbSheet=ss.getSheetByName('database');

   varactiveCell= ss.getActiveCell();

   if(activeCell.getColumn()==3&&(activeCell.getValue() =="Duyệt"||activeCell.getValue()=="Không duyệt")){

     varcurrentTime=new Date();

     activeCell.offset(0,1).setValue(currentTime);  

     varluu= answer.getRange(activeCell.getRow(),1,1,4).getValues();    

     dbSheet.getRange(dbSheet.getLastRow()+1,1,1,4).setValues(luu);

     answer.deleteRow(activeCell.getRow());

   }

}

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

if(activeCell.getColumn()==3&&(activeCell.getValue()=="Duyệt"|| activeCell.getValue()=="Không duyệt")){

“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

varcurrentTime=newDate();

activeCell.offset(0,1).setValue(currentTime);

Đâ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

varluu=answer.getRange(activeCell.getRow(),1,1,4).getValues();

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

dbSheet.getRange(dbSheet.getLastRow()+1,1,1,4).setValues(luu);

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”

answer.deleteRow(activeCell.getRow());

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

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