Упрощение работы с помощью скрипта приложений: выпадающие меню в Google Forms

В настоящее время я работаю в отделе физической безопасности технологической компании. Тем не менее, я смог использовать JavaScript в G Suite, чтобы улучшить свою работу, и мне это очень нравится. Лично я не большой поклонник утомительной работы, поэтому писать сценарии, которые не позволяют мне выполнять повторяющиеся и однообразные задачи, - роскошь. Позвольте привести пример.

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

Он настроен таким образом, чтобы электронная таблица ответов содержала чистые данные для получения статистики.

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

Чтобы решить эту проблему, я обратился ко второму любимому инструменту в моем арсенале - Apps Script. Что я сделал, так это написал сценарий, который мог брать список имен из нашей электронной таблицы со списком основного списка и, когда этот список был обновлен, он обновлял раскрывающиеся меню во всех формах Google. Бум, проблема решена, больше нет утомительной работы.

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

Прежде всего, позвольте мне рассказать вам, какой из моих любимых инструментов в моем арсенале, инструмент, который управляет ими всеми, - Google Search. Я открыл новое окно поиска и посмотрел «Обновить раскрывающиеся списки с помощью скрипта Google Apps»… или что-то в этом роде. Конечно же, я нашел несколько ресурсов, которые помогли мне это сделать.

После того, как я прочитал пару ресурсов и несколько сообщений о переполнении стека. Я открыл новое окно сценария приложений в нашей таблице основного списка. Я сделал это, перейдя в меню Инструменты ›Редактор скриптов.

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

Я переименовал скрипт для обновления списков, а затем добавил функцию onEdit (e). Я объясню почему позже.

Затем я взял уникальный идентификатор формы Google, которую хотел обновить. Я сделал это, перейдя по ссылке в окне редактирования форм и скопировав идентификатор. Идентификатор находится в URL-адресе, если вы посмотрите в следующем месте.

Https://docs.google.com/forms/d/ уникальный-здесь / изменить

После этого я сохранил идентификатор в переменной в новой функции с именем updateLists ().

Затем мне нужно было сохранить список в массиве. Итак, я создал один лист в моей электронной таблице основного списка под названием DropDownNames. Этот лист будет использовать функцию IMPORTRANGE для обеспечения доступа к имени и фамилии в листе главного списка реестров. Затем он складывает имя и фамилию в третий столбец с помощью функции СЦЕПИТЬ. В третьем столбце я беру имена, которые ищу.

Сначала я сохранил имена из столбца C листа DropDownNames в массиве, используя метод getActiveSpreadsheet () класса SpreadsheetApp, который извлекает таблицу, показанную выше. Затем, чтобы получить конкретный лист, с которого я хочу получить доступ к данным, я использовал метод getSheetByName («DropDownNames»). Наконец, я использовал функцию getRange («C1: C»), чтобы получить список имен из столбца C. Я сделал это, передав нотацию A1 для третьего столбца, который является «C1: C», что в основном означает все в третий столбец. Наконец, я вызываю функцию getValues ​​(), которая сохранит значения внутри ячеек диапазона во вложенном массиве. Вот как это выглядит:

Прежде чем я двинулся дальше, я должен был убедиться, что мои данные чистые. Это означает, что никаких предшествующих или конечных пробелов и обеспечение того, чтобы ни одно из имен не было пустым. Я сделал это следующим образом: пропустил список имен через цикл for, использовал метод trim (), чтобы вырезать все пробелы и убедиться, что они не пусты. Затем вставьте эти значения в пустой массив с именем cleanEmployeeList. Вот как это выглядит:

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

Помните функцию onEdit (e), которую мы оставили пустой? Это особая функция, так называемый «триггер», которая запускается каждый раз при редактировании таблицы. Весь код, который мы собрали для обновления списка, не будет запущен, если мы не укажем это явно. Мы можем сделать это, щелкнув кнопку воспроизведения в редакторе скриптов приложений или прикрепив функцию к другому триггеру. С onEdit (e) каждый раз, когда обновляется список или любая часть электронной таблицы, будет выполняться любой код, содержащийся в функции onEdit.

Итак, последний шаг - добавить метод updateLists () в функцию onEdit (e).

В первый раз на сборку у меня ушло около двух часов. Я столкнулся с ошибками и некоторыми другими препятствиями, прежде чем наконец заставил его работать. Я реализовал этот код около 8 месяцев назад, и он до сих пор отлично работает. Самое приятное то, что сотрудники, которые используют формы, всегда обновляют данные и могут легко обновлять их самостоятельно. Что является для меня огромным мотиватором в работе над подобными проектами. Мне нравится облегчать жизнь людей на рабочем месте с помощью Apps Script. Таким образом, два часа работы, которые могут потенциально сэкономить часы, потраченные на очистку данных или обновление форм в течение нескольких месяцев, являются чрезвычайно ценными.

Если вы добрались сюда, спасибо за чтение!

Не стесняйтесь оставлять вопросы, замечания, комментарии или критические замечания, это мой первый технический пост на Medium, и я ищу отзывы, которые можно улучшить.