Google Forms как многократная викторина выбора - как обеспечить результаты

Я создал форму 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));
};

Таким образом, это оставляет две проблемы:

  1. Когда страница загружается, она загружает оценки для all респондентов. Я хотел бы предоставить только оценку для человека, заполнившего форму.

  2. Оценки не обновляются при заполнении формы - только при обновлении страницы.

Для проблемы 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.

0
nl ja de

1 ответы

Если вы создаете свою собственную форму с помощью HtmlService или UiApp, а затем POSTing на свой скрипт для заполнения электронной таблицы, вы можете сгенерировать UID в скрытом поле и использовать это, чтобы определить результаты, которые кто-то должен увидеть.

Это будет результат как мгновенная обратная связь к их ответам на викторину. Чтобы увидеть их позже, вы также можете добавить ссылку для закладок, которая также включала этот UID в качестве параметра. Таким образом, ваш doGet() будет искать e.parameters.uid , например.

Из Google Forms, поскольку они стоят, я не уверен. вы могли бы, с новыми стилями формы, предлагать предварительно заполненное поле с таким UID, но маршрут от представления формы к вашему webapp снова неясен.

2
добавлено
Google Apps Script RC
Google Apps Script RC
269 участник(ов)

Сайт contributor.pw | G Suite чат t.me/gsuiterc | Персональные консультации от $10/час @oshliaer