На этой странице описывается, как выполнять следующие задачи с использованием форм:
- Опубликуйте форму, чтобы респонденты могли получить к ней доступ.
- Найдите ответчика на вашу форму
- Поделитесь своей формой с большим количеством респондентов
- Удалить респондентов из вашей формы
- Проверьте, принимает ли форма ответы от «Любого, у кого есть ссылка»
- Закрыть форму
- Отменить публикацию формы
- Прекратить принимать ответы на форму
- Проверьте, является ли форма устаревшей формой
Прежде чем начать
Прежде чем приступить к выполнению заданий на этой странице, выполните следующие действия:
Получить идентификатор формы. Идентификатор формы возвращается в поле
formId
ответа при создании формы с помощьюforms.create
.
Опубликуйте форму, чтобы респонденты могли получить к ней доступ.
Вы можете опубликовать существующую форму с помощью метода forms.setPublishSettings
.
Вызовите метод
forms.setPublishSettings
с идентификатором формы.
ОТДЫХ
Образец текста запроса
{
"publishSettings": {
"isPublished": true,
"isAcceptingResponses": true
}
}
Скрипт приложений
/**
* Publishes a Google Form using its URL.
*/
function publishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Publish the form. This also enables accepting responses.
form.setPublished(true);
Logger.log(`Form "${form.getTitle()}" published successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is now published.');
}
if (form.isAcceptingResponses()) {
Logger.log('Form is now accepting responses.')
}
} catch (error) {
Logger.log(`Error publishing form: ${error}`);
}
}
Питон
Node.js
Найдите ответчиков на вашу форму
Вы можете получить список всех пользователей, имеющих доступ респондента (роль PUBLISHED_READER), используя Form.getPublishedReaders() . Это возвращает массив объектов пользователей.
ОТДЫХ
Добавьте параметр запроса includePermissionsForView=published
к URL-адресу запроса.
Скрипт приложений
/**
* Gets and logs the email addresses of all responders for a form.
*/
function listResponders() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Get the array of User objects representing responders
const responders = form.getPublishedReaders();
// Log the responders
Logger.log("Following can respond to the form");
responders.forEach(responder => Logger.log(responder.getEmail()));
return responders;
} catch (error) {
Logger.log(`Error getting responders: ${error}`);
}
}
Питон
Node.js
Поделитесь своей формой с большим количеством респондентов
Чтобы добавить респондентов в форму, чтобы они могли открыть ее и ответить на нее, можно использовать метод Drive permissions.create
.
Вызовите метод
permissions.create
с идентификатором формы и настройками доступа.
ОТДЫХ
Образец текста запроса
{
"view": "published",
"role": "reader",
"type": "user",
"emailAddress": "user@example.com"
}
Скрипт приложений
/**
* Adds a single responder to a form using their email address.
*/
function `addSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address
const responderEmail = 'responder@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Add the user as a responder
form.addPublishedReader(responderEmail);
Logger.log(`Added ${responderEmail} as a responder to form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error adding responder: ${error}`);
}
}
Питон
Node.js
Удалить респондентов из вашей формы
Вы можете удалить отдельных респондентов по их адресу электронной почты или с помощью объекта User . Удаление респондента отменяет его возможность просматривать и отправлять форму, если только у него нет доступа другими способами, такими как общий доступ к домену или общий доступ к диску.
Удалить одного респондента по адресу электронной почты
ОТДЫХ
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/ PERMISSION
permissionID можно найти, «перечислив ответчики», как описано ранее.
Скрипт приложений
/**
* Removes a single responder from a form using their email address.
*/
function `removeSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address to remove
const responderEmailToRemove = 'responder-to-remove@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Remove the user as a responder
form.removePublishedReader(responderEmailToRemove);
Logger.log(`Removed ${responderEmailToRemove} as a responder from form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error removing responder: ${error}`);
}
}
Питон
Node.js
Проверьте, принимает ли форма ответы от «Любого, у кого есть ссылка»
Чтобы проверить, принимает ли форма ответы от любого человека, имеющего ссылку, вам необходимо включить службу Drive Advanced.
- Включите службу Drive Advanced:
- Откройте проект Apps Script.
- Нажмите «Услуги» (значок «плюс» рядом с «Услуги» ).
- Найдите Drive API и нажмите Добавить .
- Нажмите Добавить .
Скрипт приложений
function `isAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.view === 'published' && permission.role === 'reader') {
return true;
}
}
}
return false;
}
Питон
Node.js
Чтобы настроить возможность ответа на форму «Любой, у кого есть ссылка»:
Скрипт приложений
function `setAnyoneWithLinkResponder`(formId) {
Drive.Permissions.create({
type: 'anyone',
view: 'published',
role: 'reader',
}, formId);
}
Питон
Node.js
Чтобы удалить «Любой, у кого есть ссылка», заполните форму:
Скрипт приложений
function `removeAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.role === 'reader') {
Drive.Permissions.remove(formId, permission.id);
}
}
}
}
Питон
Node.js
Закрыть форму
Чтобы отменить публикацию формы, используйте метод Forms.setPublished(false). {/apps-script/reference/forms/form#setpublishedenabled} Отмена публикации формы делает ее недоступной и автоматически прекращает прием ответов.
ОТДЫХ
Образец текста запроса
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": false
}
}
}
Скрипт приложений
/**
* Unpublishes a Google Form using its URL.
*/
function unpublishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Unpublish the form. This also disables accepting responses.
form.setPublished(false);
Logger.log(`Form "${form.getTitle()}" unpublished successfully.`);
// Optional: Verify the state
if (!form.isPublished()) {
Logger.log('Form is now unpublished.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Питон
Node.js
Чтобы прекратить прием ответов для формы, не отменяя ее публикацию, можно использовать метод Form.setAcceptingResponses(false)
. Ответчики на вашу форму увидят закрытую страницу формы и сообщение.
ОТДЫХ
Образец текста запроса
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": true,
"isAcceptingResponses": false
}
}
}
Скрипт приложений
/**
* Stop a Google Form from accepting responses using its URL.
*/
function closeMyFormForAcceptingResponses() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// This disables the form for accepting responses.
form.setAcceptingResponses(false);
Logger.log(`Form "${form.getTitle()}" closed for accepting responses successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is still published.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Питон
Node.js
Проверьте, является ли форма устаревшей формой
Устаревшие формы — это формы, в которых нет поля publishSettings, тогда как все новые формы поддерживают параметры публикации.
Проверьте, является ли форма устаревшей, определив, поддерживает ли форма публикацию. Этот метод используется для определения того, включены ли методы setPublished(enabled)
и isPublished()
, а также разрешения для ответчика.
Скрипт приложений
/**
* Checks if a form supports advanced responder permissions (i.e., is not a legacy form).
*/
function `checkIfFormSupportsPublishing()` {
// TODO(developer): Replace the URL with your own.
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Checks whether the form supports publishing or not and logs it to the console.
const supportsPublishing = form.supportsAdvancedResponderPermissions();
if (supportsPublishing) {
Logger.log(`Form "${form.getTitle()}" supports publishing (not a legacy
form).`);
} else {
Logger.log(`Form "${form.getTitle()}" is a legacy form (does not support
publishing).`);
}
return supportsPublishing;
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}