javascript

Как я получил хороший заказ на настройку Google Форм и с чем пришлось столкнуться

  • понедельник, 2 сентября 2024 г. в 00:00:08
https://habr.com/ru/articles/840064/

Каждый раз, когда начинаешь новый проект, никогда не знаешь, какие сюрпризы он может принести. На первый взгляд, простая задача по настройке Google Формы может превратиться в увлекательное путешествие с неожиданными поворотами. Сегодня я хочу рассказать вам историю одного такого заказа, в котором мы не только справились с вызовами, но и нашли оригинальное решение.

Начало проекта: задание и первая трудность

Все началось с обычного запроса от клиента: необходимо было создать серию опросов на базе Google Форм для оценки уровня тревожности. Казалось бы, что может быть проще? Но вот неожиданность: таких форм нужно было создать около десяти, и каждая из них содержала от 100 до 150 вопросов!

Учитывая объем работы и срочность заказа, я понял, что простой ручной перенос данных из таблиц в Google Формы займёт слишком много времени. А поскольку заказ был срочным и хорошо оплачивался, нужно было срочно придумать решение, которое позволило бы справиться с задачей быстро и качественно.

Настройка таблицы: организация данных

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

Каждый вопрос должен был содержать четыре варианта ответа: «Нет, это не так», «Пожалуй, так», «Верно», «Совершенно верно». И хотя вопросы были разные, варианты ответов повторялись. Это сразу дало мне понять, что при автоматическом создании вопросов в Google Форме могут возникнуть трудности.

Придумываем скрипт: автоматизация процесса

Google Apps Script — мощный инструмент, который позволяет автоматизировать многие задачи в Google Диске. Создание скрипта для автоматического переноса вопросов из таблицы в Google Форму стало следующим шагом. Но прежде чем приступить к написанию кода, нужно было найти одну важную деталь — идентификатор формы (ID).

Где взять идентификатор формы?

Идентификатор Google Формы — это уникальный код, который позволяет скрипту "понимать", с какой именно формой нужно работать. Найти его довольно просто. Когда вы открываете свою Google Форму, в URL-адресе браузера можно увидеть что-то вроде:

https://docs.google.com/forms/d/1AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTt/edit

В этой строке всё, что находится между /d/ и /edit, является идентификатором формы. В нашем случае идентификатор формы — это 1AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTt

Разработка скрипта: шаг за шагом

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

function importQuestionsToForm() {
  var form = FormApp.openById('1AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTt'); // Ваш идентификатор формы
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = sheet.getDataRange().getValues();

  for (var i = 1; i < values.length; i++) { // Начинаем со строки 2, чтобы пропустить заголовки
    var questionText = values[i][0].trim(); // Удаляем лишние пробелы
    
    Logger.log('Строка ' + (i + 1) + ' - Вопрос: "' + questionText + '"'); // Логируем текст вопроса
    
    if (questionText === "") {
      Logger.log('Пропущена строка ' + (i + 1) + ': вопрос отсутствует, но есть ответы.');
      continue; // Пропускаем строки без вопроса
    }

    var answerOptions = values[i].slice(1).filter(String).map(option => option.trim()); // Удаляем пустые строки и пробелы
    
    Logger.log('Варианты ответов: ' + answerOptions.join(', ')); // Логируем варианты ответов
    
    if (answerOptions.length > 0) {
      try {
        var item = form.addMultipleChoiceItem(); // Добавляем вопрос с множественным выбором
        item.setTitle(questionText);
        item.setChoiceValues(answerOptions);
      } catch (e) {
        Logger.log('Ошибка добавления вопроса: ' + questionText + '. Сообщение об ошибке: ' + e.message);
      }
    } else {
      Logger.log('Пропущен вопрос: ' + questionText + ' из-за отсутствия вариантов ответа.');
    }
  }
}

Что мы сделали в этом скрипте?

  1. Идентификатор формы: В самом начале скрипта мы подключаемся к нужной Google Форме с помощью ее идентификатора (FormApp.openById). Это позволяет скрипту управлять формой и добавлять в нее вопросы.

  2. Получение данных из таблицы: Мы используем SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues(), чтобы считать все данные из активного листа таблицы. Эти данные загружаются в массив, где каждая строка представляет собой вопрос и его варианты ответов.

  3. Удаление лишних пробелов: Для того чтобы избежать ошибок, мы удаляем лишние пробелы с помощью метода trim() — как для самого вопроса, так и для каждого варианта ответа. Это помогает избежать ситуаций, когда вопрос или ответы содержат невидимые пробелы.

  4. Проверка на пустые строки: Если вопрос отсутствует или ячейка пуста, скрипт пропускает эту строку и логирует предупреждение, чтобы мы могли проверить, что пошло не так.

  5. Логирование: Мы добавили логирование (Logger.log), чтобы отслеживать, как скрипт обрабатывает данные. Это особенно полезно, когда что-то идет не так, и нужно понять, на каком этапе произошла ошибка.

  6. Добавление вопросов и ответов в форму: Если все данные корректны, скрипт добавляет вопрос в Google Форму с помощью метода addMultipleChoiceItem() и устанавливает варианты ответов через setChoiceValues().

Уроки и выводы: что я вынес из этого проекта

Этот проект показал мне, что даже в самой простой на первый взгляд задаче могут скрываться неожиданные трудности. Главное — не сдаваться и продолжать искать решение. Благодаря этому проекту я усовершенствовал свои навыки работы с Google Apps Script и понял, что автоматизация может сильно облегчить жизнь, если всё сделать правильно.

Кроме того, стоит помнить, что иногда Google Формы могут не обновлять данные автоматически. Если вдруг после выполнения скрипта некоторые вопросы не отображаются корректно, просто обновите страницу формы — это часто решает проблему.

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