gpt4 book ai didi

google-apps-script - 从 Google 表格中获取指向单个 Google 表单响应的链接

转载 作者:行者123 更新时间:2023-12-03 14:48:33 25 4
gpt4 key购买 nike

我有一个 Google 表单,它输出对 Google 表格的响应。我的一些表单问题有很长的段落响应,因此我希望能够单击跟踪表中每一行的链接,并打开原始响应页面,如表单的“响应”选项卡所示。

我试图生成的 URL 是通过从我的表单转到 Responses -> Individual 获得的,如下所示:

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() 的一部分返回的不同。换句话说,我无法从生成该链接所需的 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|
    +-----------+------------+------------------------------------------------------------+
  • 您想查看只读的响应页面。

  • 如果我的理解是正确的,那么以下解决方法如何?

    问题和解决方法:
  • 不能直接创建每个响应的端点。
  • 检索到的 URL toPrefilledUrl() 可以提交。所以它不是只读页面。

  • 不幸的是,从上述情况来看,需要考虑解决方法。在这个解决方法中,我使用了 toPrefilledUrl() 和 Web Apps。此变通方法的流程如下。

    流动:
  • 通过将 ascii 表格放在上面来创建电子表格。
  • Web Apps 用作“查看链接”的 URL。并且从 toPrefilledUrl() 检索到的 URL 用作查询参数。
  • 之前部署了 Web Apps。
  • 当用户访问链接时,Web Apps 被打开。
  • Web Apps 运行时,从 toPrefilledUrl() 的 URL 中检索 HTML 数据,并删除提交按钮。然后,打开编辑后的 ​​HTML。

  • 这样,可以显示只读响应。

    用法:

    要使用此解决方法,请执行以下流程。

    1.复制粘贴脚本

    请打开您要使用的 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);
    }

    2. 部署 Web 应用程序
  • 在脚本编辑器上,通过“发布”->“部署为 Web 应用程序”打开一个对话框。
  • 选择 “用户访问 Web 应用程序”“我” 作为“执行应用程序:”。
  • 选择“任何人,甚至是匿名的”“谁有权访问该应用程序:”。这是一个测试用例。
  • 如果使用Only myself,则只有您可以访问Web Apps。届时,请使用您的访问 token 。
  • 单击“部署”按钮作为新的“项目版本”。
  • 自动打开“需要授权”对话框。
  • 单击“查看权限”。
  • 选择自己的帐户。
  • 在“此应用未验证”处单击“高级”。
  • 单击“转到### 项目名称###(不安全)”
  • 单击“允许”按钮。
  • 单击“确定”。

  • 3.运行脚本
  • 运行 myFunction() 。这样,就创建了新的电子表格。
  • 打开创建的电子表格。
  • 单击“查看链接”单元格。

  • 这样,Web Apps 就会运行,您可以看到只读的响应页面。

    笔记:
  • 修改Web Apps脚本时,请重新部署Web Apps为新版本。这样,最新的脚本就会反射(reflect)到 Web Apps 中。如果即使修改了脚本也不重新部署 Web 应用程序,则不会使用最新的脚本。请注意这一点。

  • 引用:
  • Web Apps
  • Taking advantage of Web Apps with Google Apps Script
  • 关于google-apps-script - 从 Google 表格中获取指向单个 Google 表单响应的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57741469/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com