Основная цель раскрывающихся списков в Google Таблицах — предлагать варианты, из которых пользователь может выбирать. Это дает пользователям четкое представление обо всех доступных параметрах, а также гарантирует, что пользователь выбирает только разрешенные элементы.

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

Таблицы Google позволяют нам с легкостью использовать эту функцию. Всего за несколько щелчков мышью вы можете создать раскрывающийся список с одной ячейкой или заполнить всю строку или столбец раскрывающимися списками.

Однако вы заметите, что раскрывающийся список Google Таблиц по умолчанию позволяет пользователю выбрать только один элемент из списка.

Часто вам может потребоваться выбрать более одного варианта в раскрывающемся списке . Например, если есть набор цветов, из которого вы можете выбрать, вам может понравиться более одного цвета.

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

Поэтому множественный выбор в раскрывающихся списках может быть весьма полезным. К сожалению, эта опция традиционно не разрешена в Google Таблицах. Вам разрешен только один вариант за раз.

Хорошая новость в том, что есть способ обойти это. Можно сделать ваш раскрывающийся список допускающим множественный выбор с помощью Google AppScript.

В этой статье я покажу вам, как создать раскрывающийся список, в котором можно выбрать несколько вариантов (как показано ниже).

Но сначала начнем с нуля.

Начнем с создания нового раскрывающегося списка из списка вариантов цвета.

Разрешение множественного выбора в раскрывающемся списке (с повторением)

В этом руководстве я буду использовать следующий набор данных элементов и создам раскрывающийся список в ячейке C1.

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

  • Создайте раскрывающийся список, используя список элементов
  • Добавьте в редактор скриптов функцию, которая позволит выбрать несколько вариантов в раскрывающемся списке.

Давайте подробно рассмотрим каждый из этих шагов.

Создание выпадающего списка

Предположим, у меня есть набор данных элементов, как показано ниже, и я хочу создать раскрывающийся список в ячейке C1.

Ниже приведены шаги для этого:

  • Выберите ячейку C1 (ту, в которой вы хотите раскрывающийся список)
  • В меню выберите параметр «Данные».
  • Нажмите на проверку данных.
  • В диалоговом окне «Проверка данных» убедитесь, что «Диапазон ячеек» относится к ячейке, в которой вы хотите раскрыть раскрывающийся список.
  • В разделе «Критерии» выберите «Список из диапазона», а затем выберите диапазон, содержащий элементы, которые вы хотите отобразить, в раскрывающемся списке.
  • Нажмите на Сохранить

Теперь выпадающий список появится в выделенной ячейке (в данном примере C1). Когда вы нажмете на стрелку, вы увидите свой список опций.

Обратите внимание, что вам разрешено выбирать только один вариант за раз.

Теперь позвольте мне показать вам, как преобразовать этот раскрывающийся список (который позволяет отображать только один элемент в ячейке) в тот, который позволяет выбирать несколько элементов. А для этого вам нужно добавить скрипт функции в редактор скриптов Google Таблиц.

Добавление скрипта Google Apps для включения множественного выбора

Ниже приведен код сценария, который вам придется скопировать и вставить в редактор сценариев (шаги, указанные ниже в разделе после кода):

function onEdit(e) {
var oldValue;
var newValue;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var activeCell = ss.getActiveCell();
if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=="Sheet1") {
newValue=e.value;
oldValue=e.oldValue;
if(!e.value) {
activeCell.setValue("");
}
else {
if (!e.oldValue) {
activeCell.setValue(newValue);
}
else {
activeCell.setValue(oldValue+', '+newValue);
}
}
}
}

Ниже приведены шаги по добавлению этого кода сценария в бэкэнд Google Таблиц, чтобы раскрывающийся список, который мы создали в ячейке C1, мог позволить выбрать более одного варианта:

  • Выберите в меню пункт Инструменты.
  • Щелкните Редактор сценариев. Это откроет редактор сценариев в новом окне.
  • В окне Code.gs удалите все, что уже есть, скопируйте и вставьте указанный выше код макроса.
  • Нажмите кнопку Сохранить на панели инструментов (или используйте сочетание клавиш Control + S).
  • Дайте проекту имя (это нужно сделать только один раз)
  • Закройте окно сценария (если хотите)

 

Теперь вернитесь к рабочему листу и попробуйте выбрать несколько вариантов в раскрывающемся списке. Например, сначала выберите Apple, а затем выберите Banana.

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

Примечание. В правом верхнем углу ячейки вы увидите красный треугольник. Это может выглядеть как ошибка (поскольку значение в ячейке не соответствует ожидаемому). Вы можете спокойно игнорировать это.

Также обратите внимание, что с помощью этого кода он позволит вам выбрать один и тот же элемент дважды. Например, если вы выберете Apple, а затем снова выберете Apple, он дважды отобразит это в ячейке.

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

Как работает код?

Попробуем разобраться в этом коде по частям.

Код начинается со строки

function onEdit(e)

onEdit () — это специальная функция в Google Таблицах. Она также известна как обработчик событий. Эта функция запускается каждый раз при изменении вашей электронной таблицы.

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

Теперь AppScript передает эту функцию как объект события в качестве аргумента. Обычно объект события называется e. Этот объект события содержит информацию о инициированном событии.

Если вы знакомы с основами AppScript, вы обнаружите, что первые четыре строки довольно легко понять:

var oldValue; 
var newValue; 
var ss = SpreadsheetApp.getActiveSpreadsheet (); 
var activeCell = ss.getActiveCell ();

Я объявил две переменные — одну (oldValue), которая будет содержать старое значение ячейки, и другую (newValue), которая будет содержать новое значение ячейки.

Переменная activeCell будет содержать текущую активную ячейку, которая была отредактирована.

Теперь мы не хотим, чтобы код запускался каждый раз при редактировании какой-либо ячейки. Мы хотим, чтобы он запускался только при редактировании ячейки CA1 Sheet1. Поэтому мы убеждаемся в этом, используя оператор if:

if (activeCell.getColumn () == 3 && activeCell.getRow () == 1 && ss.getActiveSheet (). getName () == "Sheet1")

Приведенный выше код проверяет номер строки и столбца активной ячейки и имя листа. Поскольку раскрывающийся список находится в ячейке C1, он проверяет, равен ли номер строки 1 или нет, а также равен ли номер столбца 3 или нет.

Код в операторе IF выполняется только при соблюдении всех этих трех условий.

Ниже приведен код, который выполняется, когда мы находимся в правой ячейке (C1 в нашем примере).

newValue = e.value; 
oldValue = e.oldValue;

e.oldValue также является свойством объекта события, e. Это содержит предыдущее значение активной ячейки. В нашем случае это будет значение до того, как мы сделаем выпадающий выбор.

Мы хотим присвоить это переменной oldValue.

e.value — это свойство объекта события, e. В нем хранится текущее значение активной ячейки. Мы хотим присвоить это переменной newValue.

Во-первых, давайте посмотрим, что произойдет, если не выбран ни один из вариантов. В этом случае e.value будет неопределенным. Когда это происходит, мы не хотим, чтобы в ячейке A1 отображалось что-либо. Поэтому мы помещаем в ячейку пустое значение.

Это также будет иметь место, если пользователь решит удалить все предыдущие выборы и перезапустить с нуля.

if(! e.value) { 
activeCell.setValue (""); 
}

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

Это означает, что e.oldValue не определено. Когда это происходит, мы хотим, чтобы в ячейке A1 отображался только выбранный параметр (newValue).

if (! e.oldValue) { 
activeCell.setValue (newValue);

Наконец, мы указываем, что делать в следующий раз, когда будет выбран вариант. Это означает, что и e.value, и e.oldValue содержат определенные значения.

else { 
activeCell.setValue (oldValue + ',' + newValue); 
}

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

Если вы допустили ошибку, вы всегда можете очистить ячейку и начать заново. Когда это происходит, мы хотим отобразить как предыдущие значения, так и новое выбранное значение в ячейке A1, разделенные запятыми.

Примечание. Когда вы используете приведенный выше код, он не позволит вам вернуться и отредактировать часть строки. Например, если вы хотите вручную отредактировать строку элемента или удалить ее часть, вы не сможете этого сделать. Вам придется удалить все содержимое ячеек и начать заново, если вы хотите внести какие-либо изменения.

Однако здесь есть небольшая проблема. Обратите внимание, что если вы выберете элемент более одного раза, он снова будет внесен в ваш список выбора. Другими словами, повторение разрешено. Но обычно мы этого не хотим.

Ниже я подробно рассказал, как вы можете внести изменения в свой код, чтобы элемент можно было выбрать только один раз, чтобы не было повторов.

Разрешение множественного выбора в раскрывающемся списке (без повторения)

Ниже приведен код, который позволит выбрать несколько вариантов в раскрывающемся списке без повторений.

function onEdit(e) {
var oldValue;
var newValue;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var activeCell = ss.getActiveCell();
if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=='Sheet1') {
newValue=e.value;
oldValue=e.oldValue;
if(!e.value) {
activeCell.setValue("");
}
else {
if (!e.oldValue) {
activeCell.setValue(newValue);
}
else {
if(oldValue.indexOf(newValue) <0) {
activeCell.setValue(oldValue+','+newValue);
}
else {
activeCell.setValue(oldValue);
}
}
}
}
}

В приведенном выше коде я снова использую в качестве примера ячейку C1 на листе Sheet1. Если раскрывающийся список находится в другой ячейке (или листе), вам необходимо соответствующим образом скорректировать код.

Приведенная ниже часть кода позволяет нам игнорировать любое повторяющееся значение в раскрывающемся списке:

if(oldValue.indexOf(newValue) <0) {
activeCell.setValue(oldValue+', '+newValue);
}
else {
activeCell.setValue(oldValue);
}

Здесь функция indexof () проверяет, содержит ли строка в oldValue строку в newValue.

Если это так, то он вернет индекс строки в oldValue. В противном случае он вернет значение меньше 0.

Если вновь выбранная опция действительно существует в нашем списке, мы хотим оставить список как есть (поэтому мы заполняем ячейку C1 предыдущим значением). Если нет, то мы хотим добавить вновь выбранный параметр в список с запятой (‘,’) и отобразить его в ячейке C1.

Множественный выбор в раскрывающемся списке (весь столбец или несколько ячеек)

В приведенных выше примерах я показал вам, как получить раскрывающийся список с множественным выбором в ячейке. Но что, если вы хотите получить это для всего столбца или нескольких ячеек. Это легко сделать с помощью незначительных изменений в коде.

Если вы хотите, чтобы раскрывающийся список позволял выбрать несколько элементов во всем столбце C, вам необходимо заменить следующую строку кода:

if (activeCell.getColumn () == 3 && activeCell.getRow () == 1 && ss.getActiveSheet (). getName () == "Sheet1")

со следующей строкой кода:

else (activeCell.getColumn () == 3 && ss.getActiveSheet (). getName () == "Sheet1")

Когда вы это делаете, мы только проверяем, равен ли столбец 3 или нет. Любые ячейки, которые находятся на листе Sheet1 и в столбце 3, будут удовлетворять этому критерию IF, и любой раскрывающийся список в нем допускает множественный выбор.

Точно так же, если вы хотите, чтобы это было доступно для всего столбца C и F, используйте вместо этого следующую строку:

if (activeCell.getColumn () == 3 || 6 && ss.getActiveSheet (). getName () == "Sheet1")

Вышеупомянутая строка использует условие ИЛИ в операторе IF, где проверяется, равен ли номер столбца 3 или 6. Если ячейка с раскрывающимся списком находится в столбце C или F, будет разрешен выбор нескольких элементов.

Точно так же, если вы хотите, чтобы это было включено для нескольких ячеек, вы также можете сделать это, изменив код.

Вот как вы можете включить множественный выбор в раскрывающемся списке в Google Таблицах. Хотя это недоступно в качестве встроенной функции, вы можете легко сделать это с помощью магии Google Apps Script.

Надеюсь, вы нашли этот урок полезным!