![](/img/trans.png)
[英]how to update google chart dashboard dynamically when selecting an individual response from a google form response sheet e
[英]Get a link to an individual Google Forms response from a Google Sheet
我有一个 Google 表单,它输出对 Google 表格的响应。 我的一些表单问题有很长的段落回复,因此我希望能够单击跟踪表中每一行的链接,并打开原始回复页面,如表单的“回复”选项卡所示。
我试图生成的 URL 是通过从我的表单转到响应 -> 个人获得的,如下所示:
https://docs.google.com/forms/d/<form_id>/edit#response=<response_id>
我查看了FormResponse
API 文档,但无法从FormResponse
对象中提取与 Google 表单查看器使用的 ID 相同的 ID。 虽然我知道适当的表单 ID,但对该 URL 有效的响应 ID 与FormResponse.getId()
或作为FormResponse.getEditResponseUrl()
一部分返回的响应 ID 不同。 换句话说,我无法从生成该链接所需的 Forms API 获取数据。 我宁愿不使用他们支持生成的编辑链接来查看我的回复。
我的最终目标是在我的回复表单的每一行中都有一个具有上述格式的链接。 具有该格式的正确链接会将您带到该行中特定响应的单个响应查看器页面。 即,我想把这个:
+-----------+------------+
|Question 1 | Question 2 |
+-----------+------------+
|Long answer| Another ans|
+-----------+------------+
|One more an| Additional |
+-----------+------------+
成这个
+-----------+------------+------------------------------------------------------------+
|Question 1 | Question 2 | View link |
+-----------+------------+------------------------------------------------------------+
|Long answer| Another ans| https://docs.google.com/forms/d/abc123/edit#response=def456|
+-----------+------------+------------------------------------------------------------+
|One more an| Additional | https://docs.google.com/forms/d/abc123/edit#response=ghi789|
+-----------+------------+------------------------------------------------------------+
作为参考,我尝试将 URL 生成为"https://docs.google.com/forms/d/" + formId + "/edit#response=" + responses[i].getId()
,但是在访问该 URL 时它说响应 ID 无效。
有没有办法通过 Apps 脚本或其他配置在我的输出表中生成返回每个单独响应的链接?
您希望使用 Google Apps 脚本创建具有以下值的电子表格。
+-----------+------------+------------------------------------------------------------+ |Question 1 | Question 2 | View link | +-----------+------------+------------------------------------------------------------+ |Long answer| Another ans| https://docs.google.com/forms/d/abc123/edit#response=def456| +-----------+------------+------------------------------------------------------------+ |One more an| Additional | https://docs.google.com/forms/d/abc123/edit#response=ghi789| +-----------+------------+------------------------------------------------------------+
您想查看只读的响应页面。
如果我的理解是正确的,那么以下解决方法如何?
toPrefilledUrl()
的 URL toPrefilledUrl()
可以提交。 所以它不是只读页面。 不幸的是,从上述情况来看,需要考虑解决方法。 在这个解决方法中,我使用了toPrefilledUrl()
和 Web Apps。 此变通方法的流程如下。
toPrefilledUrl()
检索到的 URL 用作查询参数。toPrefilledUrl()
的 URL 中检索 HTML 数据,并删除提交按钮。 然后,打开编辑后的 HTML。这样,可以显示只读响应。
要使用此解决方法,请执行以下流程。
请打开您要使用的 Google 表单的脚本编辑器。 并将以下脚本复制并粘贴到脚本编辑器中。
function doGet(e) {
var url = Utilities.newBlob(Utilities.base64Decode(e.parameter.u)).getDataAsString();
var html = UrlFetchApp.fetch(url)
.getBlob()
.getDataAsString()
.replace('<span class="quantumWizButtonPaperbuttonLabel exportLabel">Submit</span>', "");
return HtmlService.createHtmlOutput(html);
}
function myFunction() {
var webApps = ScriptApp.getService().getUrl();
var form = FormApp.getActiveForm();
var items = form.getItems();
var headers = form.getItems().map(function(e) {return e.getTitle()});
headers.push("View link");
var formId = form.getId();
var responses = form.getResponses();
var obj = responses.map(function(e, i) {
var temp = e.getItemResponses().reduce(function(o, f) {
o[f.getItem().getTitle()] = f.getResponse();
return o;
}, {})
temp["View link"] = "=HYPERLINK(\"" + webApps + "?u=" + Utilities.base64Encode(e.toPrefilledUrl()) + "\", \"response" + (i + 1) + "\")";
return temp;
});
var values = obj.map(function(e) {
return headers.map(function(f) {
return f in e ? (typeof e[f] == "object" ? e[f].join(",") : e[f]) : "";
})
});
values.unshift(headers);
// As a sample, it creates new Spreadsheet and put values.
var sheet = SpreadsheetApp.create("sampleSpreadsheet").getSheets()[0];
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
Only myself
,则只有您可以访问 Web Apps。 届时,请使用您的访问令牌。myFunction()
。 这样,就创建了新的电子表格。这样,Web Apps 就会运行,您可以看到只读的响应页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.