Как создать форму в Google Apps Script: пошаговое руководство

Что такое Google Apps Script и его возможности

Google Apps Script (GAS) — это облачный язык сценариев, основанный на JavaScript, который позволяет автоматизировать задачи и расширять функциональность Google Workspace (ранее G Suite), включая Google Forms, Google Sheets, Google Docs и другие сервисы. GAS предоставляет доступ к различным сервисам Google через API, позволяя создавать собственные веб-приложения, автоматизировать рутинные операции, интегрировать разные сервисы и многое другое.

Возможности Google Apps Script:

Автоматизация задач в Google Workspace.

Интеграция различных сервисов Google и сторонних API.

Создание пользовательских меню, диалоговых окон и боковых панелей в Google Workspace.

Разработка веб-приложений, работающих в облаке.

Триггеры, запускаемые по расписанию или событиям (например, отправка email при получении нового ответа в форме).

Преимущества автоматизации Google Forms с помощью Apps Script

Автоматизация Google Forms с помощью Apps Script открывает широкие возможности:

Динамическое создание форм: Формы можно генерировать на основе данных из Google Sheets, баз данных или других источников.

Расширенная валидация данных: Можно реализовать сложную проверку введенных пользователем данных, выходящую за рамки стандартных возможностей Google Forms.

Автоматическая обработка ответов: Ответы можно автоматически сохранять в Google Sheets, базах данных, отправлять уведомления по email и т.д.

Персонализация: Можно адаптировать форму под конкретного пользователя или контекст.

Интеграция со сторонними сервисами: Данные из формы можно отправлять в CRM, системы аналитики и другие сервисы.

Необходимые условия для начала работы

Для работы с Google Apps Script и Google Forms потребуется:

Аккаунт Google.

Базовое понимание JavaScript. Желательно знание основ работы с API.

Редактор кода Apps Script (доступен через Google Drive или Google Sheets).

Создание и настройка новой Google Form через Apps Script

Создание нового проекта Apps Script, связанного с Google Sheets

Откройте Google Sheets и создайте новую таблицу.

В меню выберите «Инструменты» > «Редактор скриптов».

Откроется редактор Apps Script, связанный с текущей таблицей. Этот скрипт сможет взаимодействовать с данными в таблице и создавать Google Forms.

Написание кода для создания новой формы (FormApp.create)

В редакторе Apps Script введите следующий код:

/**
 * Функция для создания новой Google Form.
 */
function createForm() {
  // Создаем новую форму с указанным названием.
  const form = FormApp.create('Форма для сбора данных');

  // Устанавливаем описание формы.
  form.setDescription('Пожалуйста, заполните форму для участия в исследовании.');

  // Делаем форму доступной для всех в организации (опционально).
  // form.setCollectEmailAddresses(true);

  // Публикуем форму и получаем URL.
  const formUrl = form.getPublishedUrl();
  Logger.log('URL формы: ' + formUrl);
}

Настройка основных свойств формы: название, описание

В коде выше мы уже задали название и описание формы. Вы можете изменить эти значения в соответствии с вашими потребностями. form.setCollectEmailAddresses(true) позволяет автоматически собирать email-адреса пользователей. Запустите функцию createForm, чтобы создать форму. URL созданной формы будет выведен в журнале (View -> Logs).

Добавление элементов в форму: вопросы и типы ответов

Добавление вопросов различных типов (текст, выбор одного, выбор нескольких, раскрывающийся список)

Google Forms поддерживает различные типы вопросов, включая:

Текст (короткий ответ, абзац).

Выбор одного (radio buttons).

Выбор нескольких (checkboxes).

Раскрывающийся список (dropdown).

Загрузка файла.

Шкала оценки.

Сетка (множественный выбор).

Дата.

Время.

Использование методов FormApp для создания элементов: addCheckboxItem, addListItem, addMultipleChoiceItem, addTextItem и т.д.

Каждый тип вопроса добавляется в форму с помощью соответствующего метода объекта Form. Например:

form.addTextItem('Ваше имя?'); — добавляет текстовое поле для ввода имени.

form.addMultipleChoiceItem('Какой ваш любимый цвет?') — добавляет вопрос с множественным выбором.

form.addCheckboxItem('Какие языки программирования вы знаете?') — добавляет вопрос с выбором нескольких вариантов.

form.addListItem('Выберите страну') — добавляет выпадающий список.

function addQuestions() {
  const form = FormApp.openById('YOUR_FORM_ID'); // Замените YOUR_FORM_ID на ID вашей формы

  // Добавляем вопрос с коротким ответом.
  form.addTextItem('Ваш email:')
    .setRequired(true); // Делаем вопрос обязательным.

  // Добавляем вопрос с выбором одного варианта.
  form.addMultipleChoiceItem('Как вы оцениваете этот курс?')
    .setChoices([
      form.createChoice('Отлично'),
      form.createChoice('Хорошо'),
      form.createChoice('Удовлетворительно'),
      form.createChoice('Плохо')
    ])
    .setRequired(true);

  // Добавляем вопрос с выбором нескольких вариантов.
  form.addCheckboxItem('Какие темы вам интересны?')
    .setChoices([
      form.createChoice('JavaScript'),
      form.createChoice('Google Apps Script'),
      form.createChoice('Data Analysis')
    ]);
}
Реклама

Замените YOUR_FORM_ID на фактический ID вашей формы. Чтобы получить ID формы, откройте ее в браузере и скопируйте часть URL после /d/ и до /edit. Например, если URL формы https://docs.google.com/forms/d/e/YOUR_FORM_ID/viewform, то ID формы будет YOUR_FORM_ID.

Настройка параметров вопросов: обязательность ответа, подсказки

Для каждого вопроса можно настроить различные параметры, например, обязательность ответа (setRequired(true)) и подсказки (описания) к вопросу. Для добавления подсказки можно использовать метод setHelpText('Подсказка для этого вопроса').

Работа с ответами формы через Apps Script

Получение доступа к ответам пользователей (FormApp.getResponse)

Чтобы получить доступ к ответам пользователей, необходимо сначала получить доступ к самой форме, а затем получить список ответов.

function getFormResponses() {
  const form = FormApp.openById('YOUR_FORM_ID');
  const responses = form.getResponses();

  Logger.log('Количество ответов: ' + responses.length);

  // Перебираем ответы.
  for (let i = 0; i < responses.length; i++) {
    const response = responses[i];
    const itemResponses = response.getItemResponses();

    Logger.log('Ответ #' + (i + 1));

    // Перебираем ответы на каждый вопрос.
    for (let j = 0; j < itemResponses.length; j++) {
      const itemResponse = itemResponses[j];
      const question = itemResponse.getItem().getTitle();
      const answer = itemResponse.getResponse();

      Logger.log('Вопрос: ' + question + ', Ответ: ' + answer);
    }
  }
}

Обработка данных ответа: чтение и запись в Google Sheets

Часто возникает необходимость сохранять ответы в Google Sheets для дальнейшего анализа. Вот пример кода, который записывает ответы в таблицу:

function saveResponsesToSheet() {
  const form = FormApp.openById('YOUR_FORM_ID');
  const responses = form.getResponses();
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Получаем заголовки вопросов.
  const questions = form.getItems().map(item => item.getTitle());
  sheet.appendRow(questions);

  // Перебираем ответы и записываем их в таблицу.
  for (let i = 0; i  itemResponse.getResponse());
    sheet.appendRow(answers);
  }
}

Автоматическая отправка уведомлений о новых ответах (EmailApp.sendEmail)

Apps Script позволяет автоматически отправлять уведомления по электронной почте при поступлении новых ответов. Для этого можно использовать триггер, запускаемый при отправке формы:

В редакторе Apps Script выберите «Редактировать» > «Триггеры текущего проекта».

Нажмите «Добавить триггер».

Настройте триггер: «Выбрать функцию для запуска» -> sendEmailNotification, «Выбрать источник события» -> «Из формы», «Выбрать тип события» -> «При отправке формы».

/**
 * Функция для отправки email уведомления при новом ответе.
 * @param {Object} e Событие, содержащее информацию об ответе.
 */
function sendEmailNotification(e) {
  const formResponse = e.response;
  const itemResponses = formResponse.getItemResponses();
  let message = '';

  // Формируем текст сообщения.
  for (let i = 0; i < itemResponses.length; i++) {
    const itemResponse = itemResponses[i];
    const question = itemResponse.getItem().getTitle();
    const answer = itemResponse.getResponse();
    message += question + ': ' + answer + '\n';
  }

  // Отправляем email.
  EmailApp.sendEmail({
    to: 'your_email@example.com', // Замените на свой email.
    subject: 'Новый ответ в форме!',
    body: message
  });
}

Замените your_email@example.com на ваш адрес электронной почты.

Примеры и лучшие практики

Пример: создание формы для регистрации на мероприятие

Такая форма может включать следующие вопросы:

Имя и фамилия.

Email.

Организация.

Должность.

Вопросы о питании (вегетарианец, аллергии).

Вопросы о предпочтениях по темам мероприятия.

Можно добавить логику, чтобы в зависимости от выбранных тем предлагать пользователю дополнительные материалы или спикеров.

Пример: создание формы для сбора отзывов клиентов

Эта форма может включать:

Оценку качества обслуживания (шкала).

Текстовые поля для развернутых отзывов.

Вопросы о конкретных аспектах обслуживания (скорость, вежливость, компетентность).

Вопросы о предложениях по улучшению сервиса.

Можно настроить отправку уведомлений менеджеру при получении негативных отзывов.

Рекомендации по оптимизации кода и безопасности

Используйте Logger.log() для отладки кода. Удаляйте или комментируйте эти строки после завершения разработки.

Разбивайте код на функции. Это улучшает читаемость и упрощает повторное использование кода.

Обрабатывайте ошибки. Используйте try…catch блоки для предотвращения сбоев в работе скрипта.

Ограничивайте доступ к форме. Не делайте форму публичной, если это не требуется.

Валидируйте данные на стороне сервера. Не полагайтесь только на валидацию на стороне клиента.

Используйте параметризованные запросы к базам данных. Это защищает от SQL-инъекций (если вы используете интеграцию с базами данных).

Не храните конфиденциальные данные (например, пароли) в коде скрипта. Используйте сервисы управления секретами, если необходимо.

Тщательно проверяйте права доступа скрипта. Убедитесь, что скрипт имеет только необходимые права для выполнения своих задач.


Добавить комментарий