Отлично подходит для создания приложений для планирования в Google Forms

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

Что я делаю?

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

Приблизительное время прохождения руководства: от 15 до 30 минут.

Что вам нужно

  • Google Таблицы
  • Гугл форма
  • Знание JavaScript

Шаг 1. Создайте таблицу Google

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

Шаг 2. Создайте форму Google.

На панели инструментов выберите «Инструменты» ➡️ «Создать форму».

Шаг 3: Откройте редактор скриптов в форме

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

Шаг 4. Подключите таблицу Google к скрипту формы Google.

Вам нужно будет скопировать (Command + C или CTRL + C) URL-адрес из Google Sheet, который вы создали ранее, и вставить его в свой код, где вы видите «Ваш URL-адрес ЗДЕСЬ».

let ss = SpreadsheetApp.openByUrl(‘Your URL Here’)

Убедитесь, что ваш URL-адрес заключен в одинарные кавычки.

Шаг 5: подключите форму Google к скрипту

Это позволит вам взаимодействовать с формой Google на последующих этапах.

let form = FormApp.getActiveForm()

Шаг 6. Создайте функцию getCurrentOptions.

Мы будем использовать это, чтобы получить доступные в настоящее время параметры для формы Google.

const getCurrentOptions = () => {
    let sheet1 = ss.getSheetByName(‘Sheet1’);
    let data = sheet1.getDataRange().getValues().map(x=>x[0]);
    return data
}

Перейдите на панель инструментов и выберите Выполнить, убедившись, что на панели инструментов выбрано getCurrentOptions.

Вывод должен выглядеть так:

Шаг 7. Создайте функцию getQuestionIDs.

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

const getQuestionIDs = () => {
    form.getItems().forEach(question => {
        console.log(`Question Title: ${question.getTitle()}
        Question ID: ${question.getId()}`);
    })
}

Как только вы наберете/скопируете это, вы перейдете на верхнюю панель инструментов и убедитесь, что вы видите getQuestionIDs на панели инструментов. Затем выберите Выполнить.

ВНИМАНИЕ: скорее всего, вы увидите всплывающее окно с запросом на авторизацию. Чтобы включить это, вам нужно выбрать Проверить разрешения, после чего появится всплывающее окно входа в Google. Выберите учетную запись Google Диска Google, который вы используете. Нажмите "Дополнительно". Затем нажмите Перейти к проекту без названия (небезопасно). Я знаю, что это может показаться пугающим, но поскольку вы являетесь разработчиком этого кода, вам не о чем беспокоиться. Google сообщит вам, на что вы даете разрешение своему сценарию, а затем вы просто нажмете Разрешить.

В вашем журнале выполнения вы увидите что-то похожее на это:

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

Шаг 8: Создайте функцию setCurrentOptions

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

const setCurrentOptions = () => {
    let id = ‘YOUR ID HERE’
    let currentOptions = getCurrentOptions();
     
form.getItemById(id).asMultipleChoiceItem().setChoiceValues(currentOptions);
}

Теперь, если вы запустите эту функцию и посмотрите на свою форму Google, вы увидите варианты, перечисленные в качестве доступных вариантов.

Шаг 9: Создайте функцию onFormSubmit

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

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

const onFormSubmit = () => {
    let latestResponse = getLatestResponse();
    let optionSelected = latestResponse[1];
    updateOptions(optionSelected);
    setCurrentOptions()
}

Шаг 10: Создайте функцию с именем getLatestResponse

Это позволит получить последний ответ, записанный на листе Ответы формы 1.

const getLatestResponse = () => {
    let formResponseSheet = ss.getSheetByName(‘Form Responses 1’);
    let latestResponse =  formResponseSheet.getDataRange().getValues().pop()
    return latestResponse
}

Шаг 11: Создайте функцию с именем updateOptions

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

const updateOptions = (optionSelected) => {
    let sheet1 = ss.getSheetByName(‘Sheet1’);
    let row = sheet1.getDataRange().getValues().map(x=>x[0]).indexOf(optionSelected) + 1;
    sheet1.deleteRow(row);
}

Шаг 12. Настройте триггер для функции onFormSubmit.

Перейдите на боковую панель и выберите Триггеры, а затем в правом нижнем углу нажмите кнопку с надписью Добавить триггер.

Настройте триггер в соответствии со спецификациями ниже

Все сделано!

Теперь у вас есть форма, которая будет обновлять свой выбор в зависимости от того, что отправили другие пользователи!

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