Skip to content

Всё для WordPress, веб-разработки — и не только

👌 Множественный выбор в Google Таблицах: скрипт для ячеек с проверкой данных

👌 Множественный выбор в Google Таблицах: скрипт для ячеек с проверкой данных

Выпадающий список в Google Таблицах, штука удобная. Настроил проверку данных, и ячейка принимает только значения из диапазона. Но есть загвоздка: выбрать можно лишь один пункт. А если в задаче нужен тег «срочно, бюджетно, дизайн», три значения в одной ячейке? Стандартными средствами, никак.

На практике эта потребность всплывает постоянно: категоризация расходов, теги к задачам, списки участников. Каждый раз открывать редактор и дописывать значения через запятую, терять время. Решение, маленький скрипт на Google Apps Script, который добавляет боковую панель с чекбоксами для любого диапазона проверки данных.

Ниже, пошаговая настройка: от создания файла скрипта до готового меню «Scripts» в вашей таблице. Код проверен на реальных таблицах, работает без дополнительных разрешений и не требует знания программирования.

💡 Быстрый обзор:

  • Настройте проверку данных для ячейки по диапазону и выберите показ предупреждения вместо отклонения ввода
  • Создайте два файла в редакторе скриптов: multi-select.gs с логикой и dialog.html с интерфейсом боковой панели
  • Сохраните проект, обновите таблицу, в меню появится пункт Scripts
  • Выберите ячейку с проверкой данных, запустите скрипт и отметьте нужные значения чекбоксами
  • Нажмите Select, ячейка заполнится выбранными пунктами через запятую

Шаг 1: Готовим таблицу и проверку данных

Откройте Google Таблицу, с которой работаете. Выделите целевую ячейку (или диапазон) и задайте проверку данных: Данные → Настроить проверку данных. В поле «Правила» выберите «Значение из диапазона» и укажите список, из которого будут браться варианты.

Важный момент: не включайте «Отклонять ввод», если включить, скрипт не сможет записать в ячейку несколько значений через запятую. Достаточно показывать предупреждение.

Если готового диапазона нет, создайте отдельный лист «Справочник» и перечислите там все допустимые значения в столбик. Ссылайтесь на этот диапазон в проверке данных.

Шаг 2: Создаём скрипт Apps Script

В меню Таблицы: Расширения → Apps Script. Откроется редактор, чистая вкладка с пустым файлом. Первым делом создадим серверную часть.

Нажмите Файл → Создать → Файл скрипта. Назовите его multi-select.gs и вставьте код:

1function onOpen(e) {
2 SpreadsheetApp.getUi()
3 .createMenu('Scripts')
4 .addItem('Multi-select for this cell...', 'showDialog')
5 .addToUi();
6}
7
8function showDialog() {
9 var html = HtmlService.createTemplateFromFile('dialog').evaluate();
10 SpreadsheetApp.getUi()
11 .showSidebar(html);
12}
13
14var valid = function() {
15 try {
16 return SpreadsheetApp.getActiveRange()
17 .getDataValidation()
18 .getCriteriaValues()[0]
19 .getValues();
20 } catch(e) {
21 return null;
22 }
23};
24
25function fillCell(e) {
26 var s = [];
27 for (var i in e) {
28 if (i.substr(0, 2) == 'ch') s.push(e[i]);
29 }
30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
31}

Что здесь происходит: onOpen добавляет пункт «Multi-select for this cell…» в пользовательское меню таблицы. showDialog открывает боковую панель с HTML-интерфейсом. Функция valid извлекает список допустимых значений из проверки данных активной ячейки. А fillCell собирает отмеченные чекбоксы и записывает их в ячейку через запятую.

Обратите внимание: i.substr(0, 2) фильтрует только те параметры, чьё имя начинается с ch, это идентификаторы чекбоксов из HTML-формы. Остальные параметры игнорируются.

Нажмите Файл → Сохранить (или Ctrl+S). При первом сохранении скрипт запросит разрешения, это нормально, без них он не сможет читать данные ячейки и показывать боковую панель.

Шаг 3: Добавляем HTML-интерфейс

Теперь создадим саму боковую панель. В том же редакторе: Файл → Создать → HTML-файл. Назовите dialog.html и вставьте:

1<div style="font-family: sans-serif;">
2 <? var data = valid(); ?>
3 <form id="form" name="form">
4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?>
5 <? for (var i = 0; i < data.length; i++) { ?>
6 <? for (var j = 0; j < data[i].length; j++) { ?>
7 <input type="checkbox"
8 id="ch<?= '' + i + j ?>"
9 name="ch<?= '' + i + j ?>"
10 value="<?= data[i][j] ?>">
11 <?= data[i][j] ?><br>
12 <? } ?>
13 <? } ?>
14 <? } else { ?>
15 <p>This cell has no
16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>.
17 </p>
18 <? } ?>
19 <input type="button" value="Select"
20 onclick="google.script.run.fillCell(this.parentNode)" />
21 <input type="button" value="Refresh validation"
22 onclick="google.script.run.showDialog()" />
23 </form>
24</div>

Логика простая: серверный тег <? var data = valid(); ?> вызывает функцию valid() из GS-файла и получает массив допустимых значений. Если диапазон задан, рендерятся чекбоксы, по одному на каждое значение. Кнопка Select отправляет форму в fillCell, кнопка Refresh validation, перечитывает проверку данных (удобно при переключении между ячейками).

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

Сохраните файл: Файл → Сохранить. Оба файла (multi-select.gs и dialog.html) должны лежать в одном проекте.

Шаг 4: Запускаем и пользуемся

Вернитесь в таблицу и обновите страницу. Через пару секунд в строке меню появится новый пункт Scripts, это результат работы onOpen.

Теперь рабочий цикл:

  • Выберите любую ячейку, для которой настроена проверка данных по диапазону.
  • Перейдите в Scripts → Multi-select for this cell….
  • Справа откроется боковая панель со списком чекбоксов, все значения из вашего диапазона проверки.
  • Отметьте нужные пункты и нажмите Select.
  • Ячейка заполнится выбранными значениями через запятую: срочно, бюджетно, дизайн.

Боковую панель можно не закрывать. Просто кликните другую ячейку (тоже с проверкой данных) и нажмите Refresh validation, список чекбоксов обновится под новую ячейку.

Боковая панель скрипта с чекбоксами для выбора значений

На скриншоте, результат: ячейка с проверкой данных, боковая панель с активными чекбоксами и меню Scripts в строке. Именно так решение выглядит в работе.

Шаг 5: Что можно улучшить

Базовый скрипт решает задачу «выбрать несколько значений из выпадающего списка», и для большинства сценариев этого достаточно. Но если вы работаете с таблицей интенсивно, есть пара доработок:

  • Добавить «Select All» / «Deselect All». Две кнопки в HTML-форме, которые программно ставят или снимают все чекбоксы. Пара строк на JavaScript, и экономия десятка кликов на большом диапазоне.
  • Заменить запятую на другой разделитель. В функции fillCell строка s.join(', ') склеивает значения через запятую. Если в ваших данных запятая, часть значения, замените на ; или |.
  • Автообновление при смене ячейки. Вместо ручного нажатия «Refresh validation» можно повесить триггер на событие выбора ячейки (onSelectionChange), но это требует чуть более сложного кода и установки триггера вручную.

Исходный код скрипта, адаптация решения Александра Иванова, выложенная Arthur Attwell на GitHub Gist. Там же можно посмотреть обсуждение и доработки от сообщества.

Ниже, видеоинструкция на английском, если удобнее смотреть, а не читать:

⁉️🤔 Частые вопросы

Скрипт не появляется в меню после сохранения. Что делать?

Обновите страницу таблицы (F5 или Ctrl+R). Если не помогло, проверьте, что функция называется именно onOpen (регистр важен), и что в редакторе скриптов нет ошибок: Вид → Логи покажет stack trace. Иногда помогает закрыть редактор скриптов и открыть заново.

Боковая панель открывается, но чекбоксов нет, только сообщение про Data Validation.

Значит, выделенная ячейка не имеет проверки данных по диапазону. Выберите ячейку, для которой вы настраивали проверку в Шаге 1. Если проверка настроена на диапазон ячеек, а не на одну, убедитесь, что активна именно та ячейка, которая входит в диапазон.

Можно ли использовать скрипт на нескольких листах одной таблицы?

Да. Скрипт привязан к контейнеру (таблице), а не к конкретному листу. Проверка данных работает на уровне листа, настройте её на нужных листах, и боковая панель будет подхватывать значения из активной ячейки независимо от листа.

После выбора значений ячейка показывает ошибку «Неверное значение».

Вы включили «Отклонять ввод» в настройках проверки данных. Вернитесь в Данные → Настроить проверку данных, выберите «Показывать предупреждение» вместо «Отклонять ввод». Если данные критичны, оставьте предупреждение, оно не блокирует запись скриптом.

Скрипт запрашивает доступ к Google-аккаунту, это безопасно?

Да. Разрешения нужны для SpreadsheetApp.getActiveRange() (чтение данных ячейки) и SpreadsheetApp.getUi() (отображение меню и боковой панели). Скрипт работает только внутри вашей таблицы и не имеет доступа к другим файлам на Диске. Полный список разрешений виден в окне авторизации.

Какой скрипт множественного выбора поставить в свою таблицу

Описанное решение, минимальный работающий каркас. Два файла, ни одной внешней библиотеки, понятная логика. Для учёта расходов, тегирования задач и любых сценариев, где в одну ячейку нужно записать несколько значений из справочника, его хватает с головой.

Если вы работаете с Google Таблицами плотно, загляните в документацию Apps Script. Возможности выходят далеко за рамки чекбоксов: автоматическая отправка писем при изменении ячейки, генерация документов по шаблону, интеграция с Google Calendar. Начните с этого скрипта, а там, глядишь, и свои автоматизации напишете.