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

Posted

技术标签:

【中文标题】Google 表单作为多项选择测验 - 如何提供结果【英文标题】:Google Forms as Multiple Choice Quiz - How to Provide Results 【发布时间】:2013-02-07 14:17:11 【问题描述】:

我已经为多项选择测验构建了一个谷歌表单,并带有一个用于结果的链接电子表格,效果非常好。我有一个特定的问题,即我想向他们展示用户的结果(即他们得到了多少正确/错误的答案)。到目前为止我采取的方法是:

在电子表格上创建一个额外的工作表,其中包含一个公式来计算每个响应的正确答案数量。这给了我两列“全名”和“分数” 将表单嵌入谷歌网站 创建一个谷歌应用程序脚本来读取结果表并显示输出 将上述内容作为 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),我想知道是否有某种方法可以访问 iframe 表单中的数据(例如使用document.getElementById('targetFrame'),除了 google 脚本似乎无法访问文档模型)仅显示结果全名与表格中的姓名匹配的人(当然,如果您知道其他人的全名是什么,那么您可以查看其他人的结果,但不使用时间戳我不会看到这一点)。

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

【问题讨论】:

【参考方案1】:

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

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

从谷歌表单中,我不太确定。您可以使用新的表单样式提供具有此类 UID 的预填充字段,但从表单提交到您的 web 应用程序的路径仍然不清楚。

【讨论】:

以上是关于Google 表单作为多项选择测验 - 如何提供结果的主要内容,如果未能解决你的问题,请参考以下文章

在 Google 测验表格之间复制项目 .getFeedbackForCorrect

多项选择的测验应用程序

如何在多项选择(mcq)测验中显示正确/错误的符号

在数据库中存储多项选择测验 - 确定模式

如何使用 PHP、MySQL 和 Jquery 创建测验

Google Apps Script e.namedValues 格式多项选择