8

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

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

带有旧版表单的工具菜单

在新的表单响应菜单中,一个选项是“获取预填 URL”。这将打开一个对话框,其中包含您可以填写的表单版本,当您填写时submit,您会收到一个 URL,该 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. 对于新的 Forms 产品,我是否可以通过任何应用程序脚本 API 使用该表单?(我知道getFormURL()——我不是这个意思。)
  3. 有了问题 ID,我可以获得有关问题的更多信息吗?(问题文本、类型等)
4

3 回答 3

3

我需要类似的东西让用户去编辑他们的回复,看看这里: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);  
}
于 2013-08-26T16:57:49.503 回答
2

目前这是不可能的,但此请求正在此处的问题跟踪器上进行跟踪。请在此处添加您的用例并注意更新。

于 2013-02-05T16:22:13.207 回答
0

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

  var form = FormApp.openById('1nGvvEzQHN1n-----_your_for_id_----zemoiYQA');
  var responses = form.getResponses();
  Logger.log(responses[0].toPrefilledUrl());
于 2020-07-14T11:56:24.267 回答