Шаг 1: Создайте форму и привяжите Google Sheets
Создайте Google Forms.
В настройках формы перейдите в раздел «Ответы» → «Привязать к таблице», чтобы сохранять ответы в Google Sheets.
Шаг 2: Напишите скрипт для проверки дубликатов
Откройте таблицу с ответами → «Расширения» → «Apps Script».
Вставьте следующий код: function checkDuplicates(e) {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
const lastRow = e.range.getRow();
const currentAnswer = e.values[1]; // Индекс столбца с нужным вопросом (начинается с 0)
// Проверяем все предыдущие ответы
for (let i = 1; i < data.length; i++) {
if (data[1] === currentAnswer && i !== lastRow - 1) { // [1] — индекс столбца с ответами
sheet.deleteRow(lastRow); // Удаляем дубликат
// Отправляем письмо с предупреждением (опционально)
MailApp.sendEmail("ваш@email.com", "Дубликат ответа", `Ответ "${currentAnswer}" уже существует.`);
break;
}
}
} Шаг 3: Настройте триггер
В редакторе Apps Script нажмите на значок «Триггеры» → «Добавить триггер».
Выберите:
Функция: checkDuplicates.
Источник: «Из таблицы».
Событие: «При изменении».
Сохраните.
Как это работает
При отправке формы скрипт проверяет, есть ли в таблице дубликат ответа в указанном столбце.
Если дубликат найден — строка удаляется, а вам приходит уведомление на почту.
Ограничения
Задержка: Google Forms обновляет таблицу не мгновенно, поэтому возможна отправка нескольких дубликатов до удаления.
Уведомление пользователя: Скрипт не может заблокировать форму в реальном времени, но можно добавить всплывающее сообщение через HTML-шаблон (это требует более сложной настройки).
Альтернатива
Используйте платформы с встроенной проверкой на дубликаты:
Microsoft Forms: Ограничение на уникальные ответы.
Typeform: Платные планы позволяют настраивать валидацию.
Для ограничения количества одинаковых ответов на один вопрос в Google Forms с помощью JavaScript, можно использовать следующий подход:
1. Получить все ответы на вопрос из формы.
2. Проверить, сколько раз каждый ответ встречается.
3. Если количество повторений превышает заданный лимит, запретить отправку формы.
Пример кода на JavaScript:
```javascript
// Получаем все ответы на вопрос
var answers = document.querySelectorAll('input[name="questionName"]'
// Подсчитываем количество повторений каждого ответа
var answerCount = {};
for (var i = 0; i < answers.length; i++) {
var answer = answers.value;
answerCount[answer] = (answerCount[answer] || 0) + 1;
}
// Проверяем, нет ли ответов, превышающих лимит
var limit = 2; // Максимальное количество одинаковых ответов
for (var answer in answerCount) {
if (answerCount[answer] > limit) {
alert("Вы превысили лимит одинаковых ответов на этот вопрос."
event.preventDefault(); // Запрещаем отправку формы
break;
}
}
```
Этот код можно добавить в обработчик события отправки формы, чтобы проверять ответы перед отправкой.
Важно понять, что Google Forms не позволяют напрямую встроить собственный JavaScript-код для валидации или каких-либо ограничений внутри формы. Форма работает на инфраструктуре Google, и вы не можете изменить её клиентскую логику через пользовательские скрипты.
// Пример: ограничить повторное введение одного и того же ответа
document.querySelector('#myForm'.addEventListener('submit', function(e) {
const inputs = document.querySelectorAll('.answer-input'
let answers = [];
let duplicateFound = false;
inputs.forEach(input => {
let answer = input.value.trim();
if (answers.includes(answer) && answer !== '' {
duplicateFound = true;
}
answers.push(answer);
});
if (duplicateFound) {
e.preventDefault(); // Предотвращаем отправку формы
alert('Ошибка: найдены повторяющиеся ответы! Пожалуйста, проверьте и исправьте.'
}
});