Скрипт Google Forms для сохранения txt файлов на Google Диске

Вопрос или проблема

Мне нужна помощь с скриптом, который сохраняет каждую ответ из Google Формы в отдельный TXT файл на моем Google Диске. Я застрял на строке 3: получаю ошибку в “var responses = e.values”

Отладка:

TypeError: Невозможно прочитать свойства неопределенного (чтение 'values')
onFormSubmit    @ Código.gs:3

Я был бы очень признателен за любую помощь, которую вы можете оказать!

Ожидаемые результаты:

Та же Google Форма -> ВопросA -> ОтветA -> ОтветA.txt на Google Диске

Та же Google Форма -> ВопросB -> ОтветB -> ОтветB.txt на Google Диске

Вот использованный скрипт:

function onFormSubmit(e) {
  // Чтобы получить ответы на форму
  var responses = e.values;
  
  // ID папки на Google Диске
  var folder = DriveApp.getFolderById('PASTA_ID'); 
  
  // Сохранение каждого поля в отдельный txt файл
  for (var i = 1; i < responses.length; i++) { 
    var response = responses[i];
    
    // Имя файла на основе поля
    var fileName = "resposta_campo_" + i + ".txt";
    
    // Проверка, существует ли файл
    var existingFiles = folder.getFilesByName(fileName);
    
    // Если файл существует, удалить его
    if (existingFiles.hasNext()) {
      var existingFile = existingFiles.next();
      existingFile.setTrashed(true);  // переместить файл в корзину
    }
    
    // Новый файл с новой информацией
    folder.createFile(fileName, response);
  }
}

Ответ или решение

Конечно! Ниже представлена полная инструкция по настройке скрипта для сохранения ответов из Google Form в отдельные TXT-файлы на Google Drive. Ошибка, которую вы встречаете, связана с тем, что объект e не передается в вашу функцию. Этот объект передается автоматически при использовании триггера, который мы настроим позже.

Вот шаги для решения вашей проблемы:

  1. Создание скрипта:
    Откройте Google Form, в меню выберите «Расширения» > «Apps Script». Затем замените содержимое файла Code.gs на следующий код:
function onFormSubmit(e) {
  // Проверяем, что событие e определено
  if (!e || !e.values) {
    Logger.log("Ошибка: e или e.values неопределены.");
    return;
  }

  // Получаем ответы формы
  var responses = e.values;

  // ID папки Google Drive
  var folder = DriveApp.getFolderById('PASTA_ID'); // замените 'PASTA_ID' на ваш реальный ID папки

  // Сохраняем каждый ответ в отдельный TXT файл
  for (var i = 1; i < responses.length; i++) { 
    var response = responses[i];

    // Имя файла основано на индексе поля
    var fileName = "resposta_campo_" + i + ".txt";

    // Проверяем, существует ли файл
    var existingFiles = folder.getFilesByName(fileName);

    // Если файл существует, перемещаем его в корзину
    if (existingFiles.hasNext()) {
      var existingFile = existingFiles.next();
      existingFile.setTrashed(true); // перемещаем файл в корзину
    }

    // Создаем новый файл с новой информацией
    folder.createFile(fileName, response);
  }
}
  1. Настройка триггера:
    После написания скрипта необходимо установить триггер, чтобы функция onFormSubmit вызывалась каждый раз, когда отправляется новая форма. Для этого выполните следующие шаги:

    • В редакторе скриптов выберите «Триггеры» (или нажмите на значок часов в боковой панели).
    • Нажмите на кнопку «Добавить триггер».
    • Выберите функцию onFormSubmit.
    • Установите триггер с событиями для «Google Forms» и выберите «При отправке формы» как событие.
    • Подтвердите изменения.
  2. Тестирование:
    Заполните вашу Google Form и отправьте ответ. После этого проверьте указанную папку в Google Drive—должны появиться текстовые файлы с ответами.

Примечание:

  • Убедитесь, что вы заменили 'PASTA_ID' на фактический ID папки в вашем Google Drive, где вы хотите сохранять файлы.
  • Вам необходимо предоставить вашему скрипту доступ к Google Drive, чтобы он мог создавать файлы.

Теперь ваш скрипт должен работать корректно и создавать текстовые файлы с ответами на вопросы Google Form. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...