【问题标题】:Add the Edit Response URL of a Google Form to its spreadsheet将 Google 表单的编辑响应 URL 添加到其电子表格
【发布时间】:2019-09-14 13:39:03
【问题描述】:

我想将 Google 表单的编辑响应 URL 添加到其电子表格中,并尝试了下面链接中的代码,但没有任何反应。知道有什么问题吗?

https://ctrlq.org/code/20540-edit-form-response-spreadsheet-url

/*
* Written by Amit Agarwal
* Web: digitalinspiration.com
* Email: amit@labnol.org
* MIT License 
*/

// Create the Form Submit Trigger
function createFormTrigger() {
  var triggerName = "addFormResponseUrl";
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger(triggerName)
    .forSpreadsheet(spreadsheet)
    .onFormSubmit()
    .create();
}

function addFormResponseUrl(e) {

  // Get the Google Form linked to the response
  var responseSheet = e.range.getSheet();
  var googleFormUrl = responseSheet.getFormUrl();
  var googleForm = FormApp.openByUrl(googleFormUrl);

  // Get the form response based on the timestamp
  var timestamp = new Date(e.namedValues.Timestamp[0]);
  var formResponse = googleForm.getResponses(timestamp).pop();

  // Get the Form response URL and add it to the Google Spreadsheet
  var responseUrl = formResponse.getEditResponseUrl();
  var row = e.range.getRow();
  var responseColumn = 10; // Column where the response URL is recorded.
  responseSheet.getRange(row, responseColumn).setValue(responseUrl);
}

【问题讨论】:

  • 您是否创建了触发器?您是否更新了函数的触发器名称。你的函数有事件参数吗?

标签: google-apps-script google-forms


【解决方案1】:

完成了以上所有,但仍然没有一些东西。 现在用这个解决方法解决了这个问题,在每次提交表单时触发所有响应 -

function responseURL() {
  var form = FormApp.openById('PUzzMB0ElYOtqGIk6ir1sBrDhowmU8o-afiDqiET');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('formData');
  var formResponses = form.getResponses();
  for (var i = 0; i < formResponses.length; i++) {
    var formResponse = formResponses[i];
    sheet.getRange(i+2, 4).setValue(formResponse.getEditResponseUrl());
  }
}

【讨论】:

    【解决方案2】:

    解决响应表中的editResponseUrl的优雅方法 在脚本编辑器中将该函数设置为表单的提交触发器后为我工作。

    https://gist.github.com/ooobo/a3d60d9d2c4a9fdf5f72

    // install as a google script linked to the form, not the spreadsheet. must add a trigger to run assignEditUrls() on form submit.
    // benefit of linking to the form is that copying the spreadsheet will copy the spreadsheet, form and script.
    function assignEditUrls() {
      var form = FormApp.getActiveForm();
      var ss = SpreadsheetApp.openById(form.getDestinationId());
      var sheet = ss.getSheets()[0];
    
      var data = sheet.getDataRange().getValues();
      var urlCol = 2; // 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('=HYPERLINK("' + responses[i].getEditResponseUrl() + '", "edit")');
      }
      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);  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多