【问题标题】:Get url of the google form every time after submission is done每次提交完成后获取google表单的url
【发布时间】:2018-06-21 09:15:36
【问题描述】:

我正在使用 google 脚本将 Google 表单的 url 成功获取到 Google 电子表格。但是,我必须手动单击在 google 脚本中运行才能获取 url。

当有人点击谷歌表单中的提交按钮时如何自动获取url?

下面是我的脚本代码

function assignEditUrls() {
  var form = FormApp.openById('1F4YdKMGlJXn9w8aiq0UXzegWEfzjxUMd2CV2vewmoLQ');

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

  var data = sheet.getDataRange().getValues();
  var urlCol = 37; 
  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 表单的 url。我必须手动单击运行脚本才能在电子表格中获取 url

【问题讨论】:

  • Google Forms onsubmit的可能重复
  • @Riyafa Abdul Hameed 没有帮助,因为它是 2014 年的解决方案。当前版本中没有第 8 步。你可以检查一下

标签: google-apps-script google-sheets google-forms


【解决方案1】:

要使用“表单提交”电子表格触发器,您需要首先确保表单是saving responses to that spreadsheet。然后,您可以使用 event object 替换您声明的一些文字值。

很遗憾,触发器不提供响应 ID,因此您需要使用提供的时间戳手动搜索它。

function assignEditUrls(e) {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Form Responses 1");
  var ts = new Date(e.namedValues.Timestamp[0]);
  var form = FormApp.openById("1F4YdKMGlJXn9w8aiq0UXzegWEfzjxUMd2CV2vewmoLQ");
  var formResponses = form.getResponses(ts);
  var editURLColumn = 37;
  var row = e.range.getRow();
  for (var i = 0; i < formResponses.length; i++) {
    var formResponseTs = (new Date(formResponses[i].getTimestamp())).getTime();
    if (formResponseTs === ts.getTime()) {
      var responseId = formResponses[i].getId();
      var editURL = formResponses[i].getEditResponseUrl();
      sheet.getRange(row, editURLColumn).setValue(editURL);
      break;
    }
  }
}

【讨论】:

  • 您能详细说明一下吗?我的代码有什么问题?或者我设置触发器的方式是错误的?作为您的信息,我可以生成响应,只是编辑 url 的最后一列需要手动运行脚本来获取它。如果它有 100 人提交,我需要运行 100 次。问题是我需要在他们立即提交后将链接发送给他们进行编辑。所以我需要一种自动的方法
  • 1) 这是一个容器绑定脚本吗? 2) 表单响应是否被保存到电子表格中,我认为这个脚本也被绑定了?
  • 嗨 diego,1) 我不确定它是不是容器绑定脚本。 2)是的,表单中的所有数据都保存到电子表格响应中,除了我在第 37 列添加了另一个额外的列,以获取 google 表单 url。问题是有人提交表单后它不会获取 url。我必须手动运行脚本才能获取链接..
  • @lotteryman 看看我刚刚发布的代码示例。我已经对此进行了测试,它应该对你有用,但如果没有,请告诉我。
  • 我在提交表单以刷新 URL 后运行 assignEditUrls 脚本作为第一个操作,然后我对数据执行任何我需要执行的操作并发送包含编辑 URL 的通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2012-09-11
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
相关资源
最近更新 更多