如何为Google表单生成预先填写的表单网址

时间:2013-02-02 03:44:47

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

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

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

Tools menu with Legacy Form

在新的“表单响应”菜单中,有一个选项是“获取预填充的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)。

在apps-script中,我想为我的表单用户生成这些预填充的URL,以便我可以提供更新。我的用户不是Apps域的成员,因此我无法嵌入编辑您的回复链接。

如果我能获得有关表单的信息,我将能够将URL拼凑在一起。虽然我可以通过UI创建一个URL,并剖析它以获取该表单的信息,但我想要一个可以使用任意形式的解决方案。

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

3 个答案:

答案 0 :(得分: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);  
}

答案 1 :(得分:1)

目前无法做到这一点,但正在追踪问题跟踪器here上查询此请求。请在那里添加您的用例并观看更新。

答案 2 :(得分:0)

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

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