Я создал форму Google для теста с несколькими вариантами, со связанной электронной таблицей для результатов, которая работает очень хорошо. У меня есть конкретная проблема, которая заключается в том, что я хотел бы представить им результаты пользователя (т. Е. Сколько ответов они получили правильно или не так). Подход, который я сделал до сих пор:
- создайте дополнительный лист в электронной таблице с формулой для вычисления количества правильных ответов для каждого ответа. Это дает мне две колонки: «Полное имя» и «Оценка»
- встроить форму в сайт Google
- создать скрипт приложений Google для чтения листа результатов и отображения вывода
- вставьте вышеприведенное в тот же сайт под формой в виде гаджета сценариев приложений
В настоящее время я могу отображать все результаты, записанные до сих пор. Глянь сюда:
https://sites.google.com/site/mcqtest123/home
Сценарий выглядит так:
// Script-as-app template.
function doGet() {
var app = UiApp.createApplication();
var title = app.createLabel("Survey Results").setStyleAttribute("fontSize","16px");
app.add(title);
//readRows(app);
calculateScores(app);
return app;
};
function calculateScores(app) {
var sheet = SpreadsheetApp.openById("0AlNR-ou0QtandFFzX1JCU1VRdTl0NVBRNTFjOUFhd1E");
var responseSheet = sheet.getSheetByName("Form Responses");
var allData = responseSheet.getDataRange().getValues();
var correct = allData[1];
var responses = allData.slice(2);
//Logger.log("Timestamp, name, score");
Logger.log("Name, Score");
for (var i = 0; i < responses.length; i++) {
var timestamp = responses[i][0];
var name = responses[i][1];
var score = 0;
for (var j = 2; j < correct.length; j++) {
if(responses[i][j] == correct[j]) {
score += 1;
}
}
//var output = timestamp + ", " + name + ", " + score + "/" + correct.length
var output = name + ", " + score + "/" + correct.length
print(app, output);
}
};
function print(app, line) {
Logger.log(line);
app.add(app.createLabel(line));
};
Таким образом, это оставляет две проблемы:
-
Когда страница загружается, она загружает оценки для all респондентов. Я хотел бы предоставить только оценку для человека, заполнившего форму.
-
Оценки не обновляются при заполнении формы - только при обновлении страницы.
Для проблемы 1) я задавался вопросом, есть ли способ доступа к данным в форме iframe (например, с помощью document.getElementById ('targetFrame')
, за исключением того, что в сценариях Google нет доступа к модели документа), чтобы отображать только результаты лица, полное имя которого совпадает с именем в форме (конечно, вы могли бы просмотреть чужие результаты, если знаете, что они поставили в качестве их полного имени, но без использования метки времени I не смей обойти это).
For problem 2), I wondered if there was some way to trigger the script when the responses sheet was updated. However when I go to the spreadsheet and Tools->Script Manager I get the message "No scripts found", so I don't know how to add this trigger.