Разрешить отправку только одной формы Google для каждого пользователя

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

Рассмотрим опрос с простым выбором. Если кто-то отправляет «Вариант А», а затем повторяет опрос, чтобы отправить «Вариант Б», я бы проигнорировал последний вариант; только что отправленный вариант (B) будет удален из таблицы Google.


person tantantheman    schedule 12.09.2013    source источник


Ответы (2)


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

Предположим, что «Имя пользователя» помещено в столбец B с этим заголовком. Если вы находитесь в домене Google Apps, вы можете выбрать автоматический сбор имен пользователей. За пределами домена вам придется полагаться на то, что респонденты будут постоянно указывать свое имя пользователя.

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

function onFormSubmit (event) {
  var sheet = event.range.getSheet();
  var data = sheet.getDataRange().getValues();

  // Read usernames from column B, into string
  var userNames = sheet.getDataRange()
                       .offset(1, 1, sheet.getLastRow()-1,1)
                       .getValues()
                       .join();

  // Use a regex search to count occurrences of the current
  // username. There should be just 1.
  var re = new RegExp(event.namedValues["Username"], "g");
  var count = userNames.match(re).length;

  // Delete submission if user previously submitted.
  if (count != 1) {
    sheet.deleteRow(event.range.getRow());
  }
}

Предостережения

  • Это удаляет записи из электронной таблицы, принимающей ответы формы; это не влияет на ответы, прикрепленные к самой форме, доступные через Form.getResponses ().

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

  • Существует вероятность того, что отправленные данные, которые получает функция триггера, не синхронизированы с версией электронной таблицы, которая считывается в переменную data, событие бликов. В результате повторяющаяся запись все еще может быть разрешена. Эту проблему можно уменьшить, сравнив номер строки из event.range с последней строкой из .getDataRange() и обработав несоответствие.

person Mogsdad    schedule 22.11.2013

В Google Forms теперь есть возможность ограничить пользователя одним ответом, но у них должна быть учетная запись Google. Вы можете установить это программно setLimitOneResponsePerUser (Boolean) и проверить это с помощью hasLimitOneResponsePerUser ().

person Rubén    schedule 07.12.2017