繁体   English   中英

Google表单作为多项选择测验 - 如何提供结果

[英]Google Forms as Multiple Choice Quiz - How to Provide Results

我为多项选择测验构建了一个谷歌表单,其中包含一个结果的链接电子表格,效果非常好。 我有一个特定的问题,那就是我想向用户展示用户的结果(即他们得到的答案有多少是对错的)。 我到目前为止采用的方法是:

  • 使用公式在电子表格上创建一个额外的工作表,以计算每个响应的正确答案数。 这给了我两列“全名”和“分数”
  • 将表单嵌入到谷歌网站
  • 创建一个谷歌应用程序脚本来读取结果表和显示输出
  • 将上述内容嵌入到表单下方的相同站点中作为Apps脚本小工具

目前我能够显示到目前为止记录的所有结果。 看这里:

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. 页面加载时,会加载所有受访者的分数。 我希望能够只为填写表格的人提供分数。

  2. 表单完成后,分数不会更新 - 仅在刷新页面时才会更新。

对于问题1),我想知道是否有某种方式来访问表格iframe中的数据(例如,使用document.getElementById('targetFrame') ,除了google脚本似乎无法访问文档模型)显示其全名与表单中的名称相匹配的人的结果(当然,如果您知道他们的全名是什么,您可以查看其他人的结果,但不使用时间戳我不会看到此)。

对于问题2),我想知道在更新响应表时是否有某种方法可以触发脚本。 但是,当我转到电子表格和工具 - >脚本管理器时,我收到消息“找不到脚本”,所以我不知道如何添加此触发器。

如果您使用HtmlService或UiApp创建自己的表单,然后将POSTing到您的脚本以填充电子表格,那么您可以在隐藏字段中生成UID并使用它来确定某人需要查看的结果。

这将是对他们对测验答案的即时反馈的结果。 要在以后查看这些内容,您还可以添加一个可收藏的链接,该链接也包含该UID作为参数。 所以你的doGet()会寻找e.parameters.uid

从谷歌表格中,我不太确定。 您可以使用新的表单样式,提供具有此类UID的预填充字段,但是从表单提交到您的webapp的路径再次不清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM