【问题标题】:How to generate a pre-filled form URL for Google Form如何为 Google 表单生成预填表单 URL
【发布时间】:2013-01-17 11:26:48
【问题描述】:

我正在寻找一种编程方式来自动生成谷歌表单的预填充 URL。

在最近的更新中,Google 向 Google Docs 引入了新的 Forms 产品。如果您在电子表格中打开工具菜单,您会看到一些新选项。

在新的表单响应菜单中,一个选项是“获取预填 URL”。这将打开一个对话框,其中包含您可以填写的表单版本,当您submit 时,您会收到一个 URL,可用于打开 Live Form,其中包含您预先填写的数据并等待您. URL 看起来像这样...

https://docs.google.com/forms/d/--Form-ID--/viewform?entry.1094330118=Something&entry.1471717973=stack@example.com&entry.540962741&entry.787941281&entry.1873343651

表单中的问题具有固定的身份,例如entry.1094330118。它们可以预先填充一个值 (entry.1094330118=Something) 或空白 (entry.7879412)。

在应用程序脚本中,我想为我的表单用户生成这些预填充的 URL,以便我可以提供它们以进行更新。我的用户不是应用程序域的成员,因此我没有嵌入编辑您的回复链接的选项。

如果我能获得有关表单的信息,我就能拼凑出 URL。虽然我可以通过 UI 创建一个 URL,并对其进行剖析以获取该表单的信息,但我想要一个适用于任意表单的解决方案。

  1. 如何以编程方式确定问题 ID?
  2. 随着新 表单产品,是我可以通过任何应用程序脚本使用的表单 蜜蜂? (我知道getFormURL() - 我不是这个意思。)
  3. 有了问题 ID,我可以获得有关问题的更多信息吗? (问题文本、类型等)

【问题讨论】:

标签: google-apps-script google-docs google-docs-api


【解决方案1】:

目前无法做到这一点,但问题跟踪器 here 正在跟踪此请求。请在此处添加您的用例并注意更新。

【讨论】:

  • 谢谢,我已添加我的 vte,并链接回此处。
  • 鉴于问题单用于标记为已修复的一般 Forms Api 访问/文档,是否将此用例作为新问题单输入不是更好?
  • mhawksey - 使用新的 API 可以获得预填充的 URL。您创建一个“FormResponse”对象并获取其预填充的 URL。请参阅此处的文档 - developers.google.com/apps-script/reference/forms/…
  • @Arun 是否可以进行 HTTP 调用并从那里获取值而不是电子表格并填写表格?
【解决方案2】:

我需要类似的东西让用户去编辑他们的回复,看看这里:http://productforums.google.com/forum/#!topic/docs/LSKKCR3VHC8

复制/粘贴以下代码:

function assignEditUrls() {
var form = FormApp.openById('1MonO-uooYhARHsr0xxxxxxxxxxxxxxxxxxxxx');
//enter form ID here

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');

    //Change the sheet name as appropriate
  var data = sheet.getDataRange().getValues();
  var urlCol = 4; // column number where URL's should be populated; A = 1, B = 2 etc
  var responses = form.getResponses();
  var timestamps = [], urls = [], resultUrls = [];

  for (var i = 0; i < responses.length; i++) {
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
    urls.push(responses[i].getEditResponseUrl());
  }
  for (var j = 1; j < data.length; j++) {

    resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
  }
  sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);  
}

【讨论】:

  • 感谢您的示例,以及在 Google 文档论坛上指出 Adam 的代码。这当然会帮助其他人。
【解决方案3】:

我发现无法从表单 ID 本身创建预填充的 URL。如果表单已经有答案,则有可能:

  var form = FormApp.openById('1nGvvEzQHN1n-----_your_for_id_----zemoiYQA');
  var responses = form.getResponses();
  Logger.log(responses[0].toPrefilledUrl());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2013-05-23
    • 2018-10-12
    • 1970-01-01
    相关资源
    最近更新 更多