我已经为多项选择测验建立了一个谷歌表格,并带有一个用于结果的链接电子表格,效果很好。我有一个具体的问题,那就是我想向他们展示用户的结果(即他们得到了多少正确/错误的答案)。到目前为止我采取的方法是:
- 在电子表格上创建一个额外的表格,其中包含一个公式来计算每个响应的正确答案数量。这给了我两列“全名”和“分数”
- 将表单嵌入谷歌网站
- 创建一个谷歌应用程序脚本来读取结果表并显示输出
- 将上述内容作为 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),我想知道在更新响应表时是否有某种方法可以触发脚本。但是,当我转到电子表格和工具-> 脚本管理器时,我收到消息“未找到脚本”,所以我不知道如何添加此触发器。