Google Apps Script: Как установить флажок?

Что такое флажок (checkbox) и зачем он нужен?

Флажок (checkbox) – это интерактивный элемент интерфейса, позволяющий пользователю выбирать один или несколько вариантов из предложенного списка. В контексте Google Sheets и Forms флажки предоставляют удобный способ для сбора структурированных данных, где допускается множественный выбор. Например, в таблице можно использовать флажки для отслеживания статуса задач (выполнено/не выполнено), а в форме – для выбора нескольких интересующих опций из предложенных.

Основные области применения флажков в Google Sheets и Forms

Флажки находят широкое применение в различных сценариях:

Google Sheets:

Отслеживание прогресса проектов.

Управление запасами.

Фильтрация данных.

Проведение опросов и голосований.

Google Forms:

Сбор ответов на вопросы с множественным выбором.

Регистрация на мероприятия.

Проведение тестов и опросов.

Необходимые условия и подготовка к работе с флажками через Apps Script

Для работы с флажками через Apps Script необходимо:

Наличие Google Sheets или Google Forms документа.

Доступ к редактору Apps Script (через "Инструменты" -> "Редактор скриптов").

Базовые знания JavaScript и Google Apps Script.

Добавление флажка в Google Sheets с использованием Apps Script

Простой скрипт для добавления флажка в ячейку

Для добавления флажка в ячейку можно использовать следующий скрипт:

/**
 * Добавляет флажок в указанную ячейку Google Sheets.
 *
 * @param {string} sheetName Имя листа, в который нужно добавить флажок.
 * @param {string} cellNotation Нотация ячейки (например, "A1").
 */
function insertCheckbox(sheetName: string, cellNotation: string): void {
  // Получаем доступ к таблице и листу
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName(sheetName);

  // Получаем ячейку
  const cell = sheet.getRange(cellNotation);

  // Добавляем флажок
  const dataValidationRule = SpreadsheetApp.newDataValidation()
    .requireCheckbox()
    .build();
  cell.setDataValidation(dataValidationRule);
}

// Пример использования:
// insertCheckbox("Лист1", "A1");

Настройка положения и свойств флажка (например, зависимость от других ячеек)

Хотя напрямую настроить внешний вид флажка через Apps Script нельзя, можно управлять его поведением, например, используя условное форматирование на основе состояния флажка в другой ячейке. Также возможно управлять связанными ячейками косвенно.

Реклама

Автоматическое добавление флажков в диапазон ячеек

Следующий скрипт добавляет флажки в указанный диапазон ячеек:

/**
 * Добавляет флажки в указанный диапазон ячеек.
 *
 * @param {string} sheetName Имя листа.
 * @param {string} rangeNotation Нотация диапазона (например, "A1:A10").
 */
function insertCheckboxesInRange(sheetName: string, rangeNotation: string): void {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName(sheetName);
  const range = sheet.getRange(rangeNotation);

  const dataValidationRule = SpreadsheetApp.newDataValidation()
    .requireCheckbox()
    .build();
  range.setDataValidation(dataValidationRule);
}

// Пример использования:
// insertCheckboxesInRange("Лист1", "B1:B5");

Обработка событий, связанных с флажками

Событие `onEdit()`: отслеживание изменений состояния флажка

Событие onEdit() возникает при любом изменении ячейки в таблице. Его можно использовать для отслеживания изменений состояния флажков.

Написание функции, которая выполняется при изменении состояния флажка

/**
 * Функция, выполняемая при редактировании ячейки.
 *
 * @param {GoogleAppsScript.Events.SheetsOnEditEvent} e Объект события редактирования.
 */
function onEdit(e: GoogleAppsScript.Events.SheetsOnEditEvent): void {
  // Получаем информацию об измененной ячейке
  const range = e.range;
  const sheet = range.getSheet();
  const value = range.getValue();

  // Проверяем, является ли измененная ячейка флажком
  const dataValidation = range.getDataValidation();
  if (dataValidation && dataValidation.getCriteriaType() === SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
    // Ячейка - флажок
    const row = range.getRow();
    const column = range.getColumn();

    // value is true or false
    if (value === true) {
       //do when checkbox is checked
    } else {
      //do when checkbox is unchecked
    }

    Logger.log(`Флажок в ячейке ${range.getA1Notation()} изменен. Новое значение: ${value}`);
  }
}

Примеры практического применения: отправка уведомлений, изменение других ячеек

Пример отправки уведомления по электронной почте при установке флажка:

function onEdit(e: GoogleAppsScript.Events.SheetsOnEditEvent): void {
  const range = e.range;
  const sheet = range.getSheet();
  const value = range.getValue();
  const dataValidation = range.getDataValidation();

  if (dataValidation && dataValidation.getCriteriaType() === SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
    if (value === true) {
      // Отправляем уведомление
      const recipient = "your_email@example.com";
      const subject = "Флажок установлен!";
      const body = `Флажок в ячейке ${range.getA1Notation()} установлен.`;
      MailApp.sendEmail(recipient, subject, body);
    }
  }
}

Работа с флажками в Google Forms

Создание Google Form с вопросом типа


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