• Khung trình chiếu

Apps Script - Một số lệnh thường dùng trong Google Forms

Các nội dung liên quan đến việc lập trình bằng những ngôn ngữ chưa được liệt kê ở trên
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 112
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

Apps Script - Một số lệnh thường dùng trong Google Forms

Bài viết bởi huynhbuutam »

Đầu tiên, chúng ta mở biểu mẫu bằng Google Forms, sau đó nhấn vào nút 3 chấm dọc và chọn Script editor
Một cửa số mới hiện ra, chúng ta xoá toàn bộ nội dung hiện có, và nhập toàn bộ mã lệnh dưới đây vào vùng soạn thảo mã lệnh trong tệp Code.gs
Cuối cùng nhấn nút Save. Như vậy chúng ta đã nạp xong phần mã lệnh vào biểu mẫu của mình
Để các lệnh này hoạt động, chúng ta cần chọn hàm onOpen, sau nó nhấn lệnh Run. Việc tiếp theo là xác nhận các cấp phép cho mã lệnh vừa tạo.
Mọi người có thể điều chỉnh lại các lệnh sao cho phù hợp với yêu cầu của mình nhé

Mã: Chọn tất cả

function onOpen() {
	var menu = FormApp.getUi().createMenu('My Menu');
	menu.addItem('Sub-Menu 1 (Clear)', 'MyFunction1').addToUi();
	menu.addItem('Sub-Menu 2 (All)', 'MyFunction2').addToUi();
	menu.addItem('Sub-Menu 3 (Multiple choice)', 'MyFunction3').addToUi();
	menu.addItem('Sub-Menu 4 (Multiple choice navigation)', 'MyFunction4').addToUi();
	menu.addItem('Sub-Menu 5 (List)', 'MyFunction5').addToUi();
	menu.addItem('Sub-Menu 6 (Checkbox)', 'MyFunction6').addToUi();
	menu.addItem('Sub-Menu 7 (Grid)', 'MyFunction7').addToUi();
	menu.addItem('Sub-Menu 8 (Checkbox grid)', 'MyFunction8').addToUi();
	menu.addItem('Sub-Menu 9 (Text)', 'MyFunction9').addToUi();
	menu.addItem('Sub-Menu 10 (Paragraph text)', 'MyFunction10').addToUi();
	menu.addItem('Sub-Menu 11 (Scale)', 'MyFunction11').addToUi();
	menu.addItem('Sub-Menu 12 (Time)', 'MyFunction12').addToUi();
	menu.addItem('Sub-Menu 13 (Date)', 'MyFunction13').addToUi();
	menu.addItem('Sub-Menu 14 (Image)', 'MyFunction14').addToUi();
	menu.addItem('Sub-Menu 15 (Video)', 'MyFunction15').addToUi();
	menu.addItem('Sub-Menu 16 (Section header)', 'MyFunction16').addToUi();
	menu.addItem('Sub-Menu 17 (Page break)', 'MyFunction17').addToUi();
}

function MyFunction1() {
	/*
	var fm = FormApp.create('My Form');
	var id = fm.getId();
	var f = FormApp.openById(id);
	*/
	var f = FormApp.getActiveForm();
	var ur = f.getPublishedUrl();
	
	f.setTitle('My Form');
	f.setDescription(ur);
	f.setIsQuiz(true);
	
	var fi = f.getItems();

	for (var i = 0; i < fi.length; i += 1) {
		f.deleteItem(fi[i]);
	}
};

function MyFunction2() {
	MyFunction3();
	MyFunction4();
	MyFunction5();
	MyFunction6();
	MyFunction7();
	MyFunction8();
	MyFunction9();
	MyFunction10();
	MyFunction11();
	MyFunction12();
	MyFunction13();
	MyFunction14();
	MyFunction15();
	MyFunction16();
	MyFunction17();
}

function MyFunction3() {
	var f = FormApp.getActiveForm();
	var arr = [];

	var q = f.addMultipleChoiceItem();

	q.setTitle('Multiple choice title').setHelpText('Multiple choice help text').setRequired(true);

	q.setPoints(1);

	var q1 = q.createChoice('Choice 1', true);
	arr.push(q1);
	q1 = q.createChoice('Choice 2', false);
	arr.push(q1);
	q1 = q.createChoice('Choice 3', false);
	arr.push(q1);
	q1 = q.createChoice('Choice 4', false);
	arr.push(q1);

	q.setChoices(arr);

	var correctFeedback = FormApp.createFeedback().setText('Correct feedback text').build();
	q.setFeedbackForCorrect(correctFeedback);

	var incorrectFeedback = FormApp.createFeedback().setText('Incorrect feedback text');
	incorrectFeedback = incorrectFeedback.addLink('https://tamit.net', 'TamIT').build();
	q.setFeedbackForIncorrect(incorrectFeedback);
}

function MyFunction4() {
	var f = FormApp.getActiveForm();
	var item = f.addMultipleChoiceItem();
	var goSubmit = item.createChoice('YES', FormApp.PageNavigationType.SUBMIT);
	var goRestart = item.createChoice('NO', FormApp.PageNavigationType.RESTART);
	item.setRequired(true);
	item.setTitle('Multiple choice title');
	item.setHelpText('Multiple choice help text');
	item.setChoices([goSubmit, goRestart]);
}

function MyFunction5() {
	var f = FormApp.getActiveForm();
	var arr = [];
	
	var q = f.addListItem();

	q.setTitle('List title').setHelpText('List help text').setRequired(true);

	q.setPoints(1);

	var q1 = q.createChoice('Choice 1', true);
	arr.push(q1);
	q1 = q.createChoice('Choice 2', false);
	arr.push(q1);
	q1 = q.createChoice('Choice 3', false);
	arr.push(q1);
	q1 = q.createChoice('Choice 4', false);
	arr.push(q1);

	q.setChoices(arr);

	var correctFeedback = FormApp.createFeedback().setText('Correct feedback text').build();
	q.setFeedbackForCorrect(correctFeedback);

	var incorrectFeedback = FormApp.createFeedback().setText('Incorrect feedback text').addLink('https://tamit.net', 'TamIT').build();
	q.setFeedbackForIncorrect(incorrectFeedback);
}

function MyFunction6() {
	var f = FormApp.getActiveForm();
	var q = f.addCheckboxItem();

	q.setTitle('Checkbox title').setHelpText('Checkbox help text').setRequired(true);
	q.setPoints(1);

	var arr = [];
	var q1 = q.createChoice('Choice 1', true);
	arr.push(q1);
	q1 = q.createChoice('Choice 2', false);
	arr.push(q1);
	q1 = q.createChoice('Choice 3', true);
	arr.push(q1);
	q1 = q.createChoice('Choice 4', false);
	arr.push(q1);

	q.setChoices(arr);

	var correctFeedback = FormApp.createFeedback().setText('Correct feedback text').build();
	q.setFeedbackForCorrect(correctFeedback);

	var incorrectFeedback = FormApp.createFeedback().setText('Incorrect feedback text').addLink('https://tamit.net', 'TamIT').build();
	q.setFeedbackForIncorrect(incorrectFeedback);
}

function MyFunction7() {
	var f = FormApp.getActiveForm();
	var q = f.addGridItem();
	q.setTitle('Grid title').setHelpText('Grid help text').setRequired(true);
	q.setRows(['Row 1', 'Row 2', 'Row 3']);
	q.setColumns(['Column 1', 'Column 2', 'Column 3']);
}

function MyFunction8() {
	var f = FormApp.getActiveForm();
	var q = f.addCheckboxGridItem();
	q.setTitle('Checkbox grid title').setHelpText('Checkbox grid help text').setRequired(true);
	q.setRows(['Row 1', 'Row 2', 'Row 3']);
	q.setColumns(['Column 1', 'Column 2', 'Column 3']);
}

function MyFunction9() {
	var f = FormApp.getActiveForm();
	var q = f.addTextItem().setTitle('Text title').setHelpText('Text help text').setRequired(true);
	q.setPoints(1);
}

function MyFunction10() {
	var f = FormApp.getActiveForm();
	var q = f.addParagraphTextItem().setTitle('Paragraph text title').setHelpText('Paragraph text help text').setRequired(true);
	q.setPoints(1);
}

function MyFunction11() {
	var f = FormApp.getActiveForm();
	var q = f.addScaleItem().setTitle('Scale title').setHelpText('Scale help text').setRequired(true);
	q.setLabels('Low value', 'High value');
	q.setBounds(1, 10);
	q.setPoints(1);
}

function MyFunction12() {
	var f = FormApp.getActiveForm();
	var q = f.addTimeItem().setTitle('Time title').setHelpText('Time help text').setRequired(true);
	q.setPoints(1);
}

function MyFunction13() {
	var f = FormApp.getActiveForm();
	var q = f.addDateItem().setTitle('Date title').setHelpText('Date help text').setRequired(true);
	q.setPoints(1);
}

function MyFunction14() {
	var f = FormApp.getActiveForm();
	var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png'); 
	var q = f.addImageItem().setTitle('Image title').setHelpText('Image help text');
	q.setImage(img);
	q.setAlignment(FormApp.Alignment.CENTER);
	q.setWidth(800);
}

function MyFunction15() {
	var f = FormApp.getActiveForm();
	var q = f.addVideoItem().setTitle('Video title').setHelpText('Video help text');
	q.setVideoUrl('https://youtu.be/rJvMVhjYhoc');
	q.setAlignment(FormApp.Alignment.CENTER).setWidth(800);
}

function MyFunction16() {
	var f = FormApp.getActiveForm();
	f.addSectionHeaderItem().setTitle('Section header title').setHelpText('Section header help text');
}

function MyFunction17() {
	var f = FormApp.getActiveForm();
	f.addPageBreakItem().setTitle('Page break title').setHelpText('Page break help text');
}
Giải thích từng lệnh
- Tạo bảng chọn chính có tiêu đề là "My Menu" (Lưu ý: Việc tạo bảng chọn chỉ áp dụng trong trường hợp mã lệnh được đính kèm bên trong biểu mẫu, điều này đồng nghĩa với việc chúng ta cần mở biểu mẫu bằng Google Forms mới có thể chạy được các lệnh liên quan đến việc tạo các bảng chọn)

Mã: Chọn tất cả

var menu = FormApp.getUi().createMenu('My Menu');
- Thêm lệnh con có tiêu đề là "Sub-Menu 1 (Clear)", khi chọn lệnh này sẽ thực thi hàm "MyFunction1"

Mã: Chọn tất cả

menu.addItem('Sub-Menu 1 (Clear)', 'MyFunction1').addToUi();
- Tạo biểu mẫu mới với tên là "My Form"

Mã: Chọn tất cả

var fm = FormApp.create('My Form');
- Lấy mã biểu mẫu

Mã: Chọn tất cả

var id = fm.getId();
- Lấy biểu mẫu có mã là giá trị của biến id để xử lí

Mã: Chọn tất cả

var f = FormApp.openById(id);
- Lấy biểu mẫu hiện đang mở để xử lí

Mã: Chọn tất cả

var f = FormApp.getActiveForm();
- Lấy liên kết khi xuất bản của biểu mẫu

Mã: Chọn tất cả

var ur = f.getPublishedUrl();
- Đặt tiêu đề cho biểu mẫu là "My Form"

Mã: Chọn tất cả

f.setTitle('My Form');
- Đặt phần mô tả cho biểu mẫu là giá trị của biến ur

Mã: Chọn tất cả

f.setDescription(ur);
- Đặt dạng biểu mẫu là bài kiểm tra

Mã: Chọn tất cả

f.setIsQuiz(true);
- Lấy danh sách các phần tử trong biểu mẫu

Mã: Chọn tất cả

var fi = f.getItems();
- Xóa phần tử thứ i trong biểu mẫu

Mã: Chọn tất cả

f.deleteItem(fi[i]);
- Thêm câu hỏi dạng chỉ chọn 1 vào biểu mẫu

Mã: Chọn tất cả

var q = f.addMultipleChoiceItem();
- Đặt tiêu đề cho câu hỏi là "Multiple choice title"

Mã: Chọn tất cả

q.setTitle('Multiple choice title');
- Đặt nội dung diễn giải cho câu hỏi là "Multiple choice help text"

Mã: Chọn tất cả

q.setHelpText('Multiple choice help text');
- Đặt cho câu hỏi là bắt buộc phải trả lời

Mã: Chọn tất cả

q.setRequired(true);
- Đặt điểm số cho câu hỏi là 1 điểm

Mã: Chọn tất cả

q.setPoints(1);
- Tạo một lựa chọn mới với nội dung là "Choice 1", với định nghĩa đây là đáp án đúng

Mã: Chọn tất cả

var q1 = q.createChoice('Choice 1', true);
- Đặt danh sách các lựa chọn trong biến mảng arr vào câu hỏi

Mã: Chọn tất cả

q.setChoices(arr);
- Tạo một phản hồi với nội dung "Correct feedback text"

Mã: Chọn tất cả

var correctFeedback = FormApp.createFeedback().setText('Correct feedback text').build();
- Đặt phản hồi vào câu hỏi mà người dùng trả lời đúng

Mã: Chọn tất cả

q.setFeedbackForCorrect(correctFeedback);
- Tạo một phản hồi với nội dung "Incorrect feedback text"

Mã: Chọn tất cả

var incorrectFeedback = FormApp.createFeedback().setText('Incorrect feedback text');
- Thêm liên kết vào nội dung phản hồi với địa chỉ "https://tamit.net" và tiêu đề là "TamIT"

Mã: Chọn tất cả

incorrectFeedback = incorrectFeedback.addLink('https://tamit.net', 'TamIT').build();
- Đặt phản hồi vào câu hỏi mà người dùng trả lời sai

Mã: Chọn tất cả

q.setFeedbackForIncorrect(incorrectFeedback);
- Tạo một lựa chọn mới với nội dung là "YES", với điều hướng là thực hiện gửi biểu mẫu nếu người dùng chọn phương án này

Mã: Chọn tất cả

var goSubmit = item.createChoice('YES', FormApp.PageNavigationType.SUBMIT);
- Tạo một lựa chọn mới với nội dung là "NO", với điều hướng là thực hiện biểu mẫu lại từ đầu nếu người dùng chọn phương án này

Mã: Chọn tất cả

var goRestart = item.createChoice('NO', FormApp.PageNavigationType.RESTART);
- Tạo 3 hàng cho câu hỏi dạng lưới với tiêu đề lần lượt là "Row 1", "Row 2", "Row 3"

Mã: Chọn tất cả

q.setRows(['Row 1', 'Row 2', 'Row 3']);
- Tạo 3 cột cho câu hỏi dạng lưới với tiêu đề lần lượt là "Column 1", "Column 2", "Column 3"

Mã: Chọn tất cả

q.setColumns(['Column 1', 'Column 2', 'Column 3']);
- Đặt nhãn cho mức độ thấp nhất là "Low value" và cao nhất là "High value" của câu hỏi dạng chọn mức độ

Mã: Chọn tất cả

q.setLabels('Low value', 'High value');
- Đặt thang mức độ từ 1 đến 10 cho câu hỏi dạng chọn mức độ

Mã: Chọn tất cả

q.setBounds(1, 10);
- Lấy hình ảnh từ địa chỉ "https://www.google.com/images/srpr/logo4w.png"

Mã: Chọn tất cả

var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png');
- Đặt hình ảnh từ biến img vào biểu mẫu

Mã: Chọn tất cả

q.setImage(img);
- Đặt nội dung canh giữa

Mã: Chọn tất cả

q.setAlignment(FormApp.Alignment.CENTER);
- Đặt độ rộng của nội dung là 800px

Mã: Chọn tất cả

q.setWidth(800);
- Đặt video từ Youtube với liên kết là "https://youtu.be/rJvMVhjYhoc" vào biểu mẫu

Mã: Chọn tất cả

q.setVideoUrl('https://youtu.be/rJvMVhjYhoc');

Chi tiết tất cả các lệnh xem tại:
+ Các lệnh liên quan đến giao diện người dùng: https://developers.google.com/apps-scri ... ce/base/ui
+ Các lệnh chung liên quan đến biểu mẫu: https://developers.google.com/apps-scri ... s/form-app
+ Các lệnh liên quan đến câu hỏi dạng lựa chọn: https://developers.google.com/apps-scri ... rms/choice
+ Các lệnh liên quan đến câu hỏi dạng danh sách: https://developers.google.com/apps-scri ... /list-item
+ Các lệnh liên quan đến câu hỏi dạng đánh dấu kiểm: https://developers.google.com/apps-scri ... ckbox-item
+ Các lệnh liên quan đến câu hỏi dạng lưới lựa chọn: https://developers.google.com/apps-scri ... /grid-item
+ Các lệnh liên quan đến câu hỏi dạng lưới đánh dấu kiểm: https://developers.google.com/apps-scri ... -grid-item
+ Các lệnh liên quan đến câu hỏi trả lời ngắn: https://developers.google.com/apps-scri ... /text-item
+ Các lệnh liên quan đến cẩu hỏi đoạn văn bản: https://developers.google.com/apps-scri ... -text-item
+ Các lệnh liên quan đến câu hỏi dạng chọn mức độ: https://developers.google.com/apps-scri ... scale-item
+ Các lệnh liên quan đến câu hỏi dạng thời gian: https://developers.google.com/apps-scri ... /time-item
+ Các lệnh liên quan đến câu hỏi dạng ngày: https://developers.google.com/apps-scri ... /date-item
+ Các lệnh liên quan đến nội dung hình ảnh: https://developers.google.com/apps-scri ... image-item
+ Các lệnh liên quan đến nội dung video: https://developers.google.com/apps-scri ... video-item
+ Các lệnh liên quan đến phân đoạn: https://developers.google.com/apps-scri ... eader-item
+ Các lệnh liên quan đến ngắt trang: https://developers.google.com/apps-scri ... break-item

Mở rộng một số lệnh liên quan đến các phản hồi từ người dùng, có kết hợp với Google Sheets

Mã: Chọn tất cả

function GetResponses() {
	var form = FormApp.openById('fomr_id');
	
	var excel = SpreadsheetApp.openById('excel_id');
	var s = excel.getActiveSheet();
	s.getDataRange().clear();
	
	var formResponses = form.getResponses();

	for (var i = 0; i < formResponses.length; i++) {
		var formResponse = formResponses[i];
		var itemResponses = formResponse.getItemResponses();

		s.getRange('A' + (i+2)).setValue(formResponse.getEditResponseUrl());
		s.getRange('B' + (i+2)).setValue(itemResponses[0].getResponse());
		s.getRange('C' + (i+2)).setValue(itemResponses[1].getResponse());

		var point = formResponse.getGradableItemResponses();
		var score = 0;

		for (var j = 0; j < point.length; j++)
		{
			score += point[j].getScore();
		}

		s.getRange('D' + (i+2)).setValue(score/2);
	}
};
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối