#javascript #google-apps-script #google-sheets #google-forms
Вопрос:
Вот моя ситуация. У меня есть длинный список студентов (у каждого студента есть удостоверение личности); и у каждого студента есть свои предпочтения в еде и играх … (все эти данные хранятся в электронной таблице Google). Я хотел бы подтвердить всем студентам, что вся информация верна.
Я могу сделать это, отправив каждому студенту предварительно заполненную ссылку на форму Google, а затем, после того как они отредактируют и нажмут «Отправить», я отсканирую и обновлю электронную таблицу и отправлю им новую ссылку с предварительно заполненной информацией, которую они только что отредактировали.
Тем не менее, я нахожу это немного «грязным» (? Я не совсем уверен, что это правильное слово, так как они должны проверить свою электронную почту, нажать на ссылку, и когда им снова понадобится изменить свои данные, они должны найти последнее электронное письмо, отправленное мной, и нажать на новую ссылку).
Интересно, можно ли это решить, просто используя только форму Google (или, может быть, встроив форму Google на другую страницу?)? Я подумываю о создании 2 форм Google:
- Одна форма для студентов, чтобы ввести свой идентификатор, и когда они нажмут «Отправить», они перейдут во вторую форму Google с их последней информацией (полученной из электронной таблицы), предварительно заполненной для них.
- Вторая форма-это форма, заполненная их ранее введенной информацией.
Поскольку скрипт приложения Google не позволит мне перенаправлять пользователей на какой-либо другой веб-сайт (в том числе на другие формы Google?) При отправке формы, я подумываю о том, чтобы встроить идентификатор Google Form в свой сайт на сайте Google.
Вот мое довольно плохое встраивание:
<!-- Normal form embed code, add an ID -->
<iframe id="gform" src="https://docs.google.com/forms/d/e/MyFirstFormURL/viewform?embedded=true" width="640" height="700" frameborder="0" marginheight="0" marginwidth="0" style="margin:0 auto; max-width:100%;">Loading…</iframe>
<script type="text/javascript">
var load = 0;
document.getElementById('gform').onload = function(){
/*Execute on every reload on iFrame*/
load ;
if(load == 2){
/*Second reload is a submit*/
document.location = "https://docs.google.com/forms/d/e/MySecondFormURL/viewform?embedded=true";
}
}
</script>
Но я сталкиваюсь с 2 проблемами (или, может быть, с 3 проблемами).:
- Я использую событие onload для iframe, чтобы проверить, была ли уже отправлена форма; что плохо, так как оно все равно перенаправит меня на вторую страницу, даже когда я нажму «Очистить форму».
- Я не могу прочитать идентификатор студента, указанный в форме Google, встроенной в iframe. 🙁
- Даже если я каким-то образом смогу прочитать идентификатор в своей форме Google, у меня нет возможности выполнить внешний поиск в моей электронной таблице, чтобы получить желаемую предварительно заполненную ссылку (это должно быть сделано серверной частью GAS, верно?).
У меня есть некоторые базовые знания в программировании (например, немного C и C ; но у меня очень мало (почти ничего) опыта, когда дело доходит до веб-разработки), я просто перечисляю все, о чем я думал и над чем работал в этом посте. 🙁
Кто-нибудь может меня подтолкнуть? 🙁
Заранее большое вам спасибо, :*
Ответ №1:
Существует множество способов, которыми это можно сделать, но вот что я бы использовал. Основное преимущество этого подхода заключается в том, что для него не потребуется никакого кодирования сценариев приложений.
Вместо того , чтобы отправлять по электронной почте прямую ссылку на a form
, я бы отправил студентам ссылку на веб-страницу, которая на самом деле является a google spreadsheet
(пример здесь-Не стесняйтесь отправлять данные теста в форме).
Обязательно свяжите ответы формы, чтобы они отображались в той же электронной таблице, а затем используйте index
Counta
функцию и (см. Ниже), чтобы получить соответствующие последние ответы, как я сделал в ячейках b3
и c3
на скриншоте ниже. Эти последние ответы могут быть встроены в ссылку на форму, показанную в ячейке A3
, которая гарантирует, что в электронной таблице всегда будет ссылка на последнюю отправку.
Примечание.Если вы хотите предоставить своим студентам ссылку на фактическую электронную таблицу, это будет немного менее совместимо с браузером, но позволит мгновенно обновлять ссылку на обновленную форму, в то время как веб-страница обновляется каждые 5 минут.
Удачи.
Комментарии:
1. Большое вам спасибо, я немного повозился с этим, и это действительно дало мне несколько идей для решения моей проблемы. Огромное спасибо, :*
2. Рад, что это сработало. Спасибо, что согласились. Никаких поцелуев на StackOverflow. 🙂