Что такое Google Apps Script и его возможности
Google Apps Script (GAS) — это облачный язык сценариев, основанный на JavaScript, который позволяет автоматизировать задачи и расширять функциональность Google Workspace (ранее G Suite), включая Google Forms. GAS предоставляет доступ к различным сервисам Google, таким как Gmail, Google Sheets, Google Docs и, конечно же, Google Forms. С помощью GAS можно создавать пользовательские функции, автоматизировать рабочие процессы и интегрировать различные приложения.
Например, можно автоматически отправлять электронные письма с подтверждением после заполнения формы, сохранять ответы в Google Sheets, создавать персонализированные PDF-отчеты или интегрировать данные формы с CRM-системами. GAS позволяет создавать сложные сценарии, которые значительно упрощают работу с данными и автоматизируют рутинные задачи.
Основы работы с Google Forms через Apps Script
Работа с Google Forms через Apps Script начинается с понимания объектной модели FormApp. FormApp — это сервис, предоставляемый GAS, который позволяет создавать, открывать, изменять и обрабатывать Google Forms. Основные объекты, с которыми придется работать:
Form: Представляет саму форму.ListItem,MultipleChoiceItem,CheckboxItem,GridItem,DateItem,TimeItem,DurationItem,ParagraphTextItem,TextItem: Представляют различные типы вопросов в форме.FormResponse: Представляет ответ на форму.ItemResponse: Представляет ответ на конкретный вопрос в форме.
Для доступа к форме необходимо получить её объект, используя её ID или URL. Затем можно использовать методы объекта Form для добавления вопросов, изменения настроек и обработки ответов.
Необходимые разрешения и настройка скрипта
Перед началом работы с Google Forms через Apps Script необходимо убедиться, что скрипт имеет необходимые разрешения. При первом запуске скрипта, который обращается к FormApp, Google запросит разрешение на доступ к вашим Google Forms. Это необходимо для того, чтобы скрипт мог читать и изменять ваши формы.
Для настройки скрипта необходимо:
- Открыть Google Forms и перейти в режим редактирования формы.
- Открыть редактор Apps Script: Инструменты -> Редактор скриптов.
- В редакторе скриптов можно писать код, который будет взаимодействовать с формой.
- Сохранить скрипт. При первом запуске скрипта Google запросит необходимые разрешения.
Открытие формы Google Forms с помощью URL
Получение URL формы Google Forms
Самый простой способ открыть Google Forms через Apps Script — использовать её URL. URL формы можно получить двумя способами:
- URL для заполнения: Этот URL используется для открытия формы для заполнения пользователями. Его можно найти, нажав кнопку Отправить в режиме редактирования формы.
- URL для редактирования: Этот URL используется для открытия формы в режиме редактирования. Его можно получить из адресной строки браузера, когда форма открыта в режиме редактирования.
Создание функции Apps Script для открытия формы по URL
Чтобы открыть форму по URL, можно использовать JavaScript функцию window.open(). Для этого необходимо создать функцию Apps Script, которая будет генерировать HTML-страницу с JavaScript кодом, открывающим форму в новом окне или вкладке.
/**
* Открывает Google Form по URL в новом окне.
* @param {string} formUrl URL формы Google Forms.
*/
function openFormByUrl(formUrl: string): void {
const htmlOutput = HtmlService.createHtmlOutput(
`<script>window.open("${formUrl}");</script>`
).setWidth(1).setHeight(1);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Открытие формы');
}
/**
* Пример использования функции openFormByUrl.
*/
function testOpenForm(): void {
const formUrl = 'YOUR_FORM_URL'; // Замените на URL вашей формы
openFormByUrl(formUrl);
}
Реализация открытия формы в новом окне или вкладке
В приведенном выше примере функция openFormByUrl создает HTML-страницу с JavaScript кодом, который открывает форму в новом окне или вкладке. Функция SpreadsheetApp.getUi().showModalDialog() отображает HTML-страницу в диалоговом окне. Это необходимо, поскольку Apps Script не может напрямую управлять браузером пользователя. Можно убрать отображение диалогового окна, изменив код и используя HtmlService.createHtmlOutput().append('<script>window.open("${formUrl}");</script>'), а затем вставить этот HTML в SideBar или Menu.
Открытие формы Google Forms программно через Apps Script
Получение доступа к форме Google Forms через ID
Более гибкий способ работы с Google Forms — получение доступа к форме через её ID. ID формы можно найти в URL формы в режиме редактирования. Например, если URL формы https://docs.google.com/forms/d/e/YOUR_FORM_ID/viewform, то ID формы будет YOUR_FORM_ID.
/**
* Получает объект Form по ID.
* @param {string} formId ID формы Google Forms.
* @return {GoogleAppsScript.Forms.Form} Объект Form.
*/
function getFormById(formId: string): GoogleAppsScript.Forms.Form {
try {
const form = FormApp.openById(formId);
return form;
} catch (e) {
Logger.log(`Ошибка при открытии формы с ID ${formId}: ${e}`);
return null;
}
}
/**
* Пример использования функции getFormById.
*/
function testGetForm(): void {
const formId = 'YOUR_FORM_ID'; // Замените на ID вашей формы
const form = getFormById(formId);
if (form) {
Logger.log(`Форма с ID ${formId} открыта: ${form.getTitle()}`);
} else {
Logger.log(`Не удалось открыть форму с ID ${formId}`);
}
}
Использование FormApp сервиса для работы с формами
После получения объекта Form можно использовать методы сервиса FormApp для работы с формой. Например, можно получить название формы, добавить вопросы, изменить настройки и т.д.
/**
* Пример работы с объектом Form.
*/
function workWithForm(): void {
const formId = 'YOUR_FORM_ID'; // Замените на ID вашей формы
const form = getFormById(formId);
if (form) {
Logger.log(`Название формы: ${form.getTitle()}`);
form.setDescription('Описание, добавленное через Apps Script');
}
}
Получение URL для редактирования формы
Иногда необходимо получить URL для редактирования формы. Это можно сделать с помощью метода getEditUrl() объекта Form.
/**
* Получает URL для редактирования формы.
* @param {string} formId ID формы Google Forms.
* @return {string} URL для редактирования формы.
*/
function getEditUrl(formId: string): string {
const form = getFormById(formId);
if (form) {
return form.getEditUrl();
} else {
return null;
}
}
/**
* Пример использования функции getEditUrl.
*/
function testGetEditUrl(): void {
const formId = 'YOUR_FORM_ID'; // Замените на ID вашей формы
const editUrl = getEditUrl(formId);
if (editUrl) {
Logger.log(`URL для редактирования формы: ${editUrl}`);
} else {
Logger.log(`Не удалось получить URL для редактирования формы`);
}
}
Автоматизация открытия формы на основе событий
Триггеры Apps Script: типы и настройка
Apps Script позволяет автоматически запускать функции в ответ на определенные события. Для этого используются триггеры. Существуют различные типы триггеров:
- Простые триггеры:
onOpen,onEdit,onInstall(запускаются автоматически при выполнении определенных действий пользователем). - Устанавливаемые триггеры:
Time-driven(по расписанию),From spreadsheet(при изменении таблицы),From form(при отправке формы),From calendar(при наступлении события в календаре). Устанавливаемые триггеры требуют явного создания.
Для настройки устанавливаемого триггера необходимо использовать сервис ScriptApp.
Открытие формы при наступлении определенного события (например, отправка email)
Предположим, необходимо отправить электронное письмо с ссылкой на форму после добавления новой строки в Google Sheets.
/**
* Отправляет email с ссылкой на форму при добавлении новой строки в таблицу.
* @param {GoogleAppsScript.Events.SheetsOnEditEvent} e Объект события onEdit.
*/
function onEdit(e: GoogleAppsScript.Events.SheetsOnEditEvent): void {
const sheet = e.range.getSheet();
const formId = 'YOUR_FORM_ID'; // Замените на ID вашей формы
const formUrl = `https://docs.google.com/forms/d/e/${formId}/viewform`;
// Проверяем, что изменение произошло в нужном листе и что была добавлена новая строка.
if (sheet.getName() === 'Лист1' && e.range.getRow() === sheet.getLastRow()) {
const recipient = 'user@example.com'; // Замените на адрес электронной почты получателя
const subject = 'Ссылка на форму';
const body = `Пожалуйста, заполните форму по ссылке: ${formUrl}`;
MailApp.sendEmail(recipient, subject, body);
}
}
В данном примере используется простой триггер onEdit. Функция onEdit будет автоматически запускаться при каждом изменении таблицы. Код проверяет, что изменение произошло в нужном листе и что была добавлена новая строка. Если это так, то отправляется электронное письмо со ссылкой на форму.
Примеры использования: открытие формы по расписанию, по событию в Google Sheets
- Открытие формы по расписанию: Можно использовать триггер
Time-drivenдля автоматического открытия формы по расписанию (например, каждый день в 9 утра). Для этого необходимо создать функцию, которая будет открывать форму, и установить триггерTime-drivenдля этой функции. - Открытие формы по событию в Google Sheets: Можно использовать триггер
From spreadsheetдля автоматического открытия формы при выполнении определенных условий в Google Sheets (например, при добавлении нового значения в определенную ячейку). Для этого необходим установить устанавливаемый триггерScriptApp.newTrigger('functionName').forSpreadsheet(spreadsheetId).onChange().create().
Расширенные возможности и устранение неполадок
Обработка ошибок и логирование
При работе с Apps Script важно обрабатывать ошибки и логировать информацию о работе скрипта. Для этого можно использовать try...catch блоки и сервис Logger.
try {
// Код, который может вызвать ошибку
FormApp.openById(formId);
} catch (e) {
Logger.log(`Произошла ошибка: ${e}`);
}
Работа с пользовательским интерфейсом (UI) для открытия формы
Можно создать пользовательский интерфейс (UI) для открытия формы. Для этого можно использовать сервис HtmlService для создания HTML-страницы с кнопкой, которая будет открывать форму.
Альтернативные методы открытия формы (например, использование HTML-сервиса)
Помимо использования window.open(), можно использовать сервис HtmlService для создания более сложных пользовательских интерфейсов для открытия формы. Например, можно создать модальное окно с информацией о форме и кнопкой для открытия формы.