首页 > 解决方案 > 如何在电子表格中获取可编辑表单响应的 URL

问题描述

我试图让可编辑的谷歌表单响应的 URL 显示在谷歌表格中,但它似乎不起作用。

我看过Awesome TableRuben 的例子。基于这两个链接和其他一些链接,它们似乎适用于单一形式的响应表,但不是多个。

我第一次尝试了这段代码:

var formURL = 'https://docs.google.com/forms/d/__Your ID__/viewform';
var sheetName = '__Response sheet__';
var columnIndex = __column where it appears__;

function getEditResponseUrls() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = 2; i < data.length; i++) {
    if (data[i][0] != '' && data[i][columnIndex-1] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if (formSubmitted.length < 1) continue;
      var editResponseUrl = formSubmitted[0].getEditResponseUrl();
      sheet.getRange(i+1, columnIndex).setValue(editResponseUrl);
    }
  }
}

第二个是:

// Form URL
var formID = '__Your ID__';
// Sheet name used as destination of the form responses
var sheetName = '__Response sheet__'';
/*
 * Name of the column to be used to hold the response edit URLs 
 * It should match exactly the header of the related column, 
 * otherwise it will do nothing.
 */
var columnName = '__name of column where it appears__' ;

// Responses starting row
var startRow = 2;

function getEditResponseUrls(){
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
    var columnIndex = headers[0].indexOf(columnName);
    var data = sheet.getDataRange().getValues();

    var form = FormApp.openById(formId);

    for(var i = startRow-1; i < data.length; i++) {
        if(data[i][0] && !data[i][columnIndex]) {

            var timestamp = data[i][0];
            var formSubmitted = form.getResponses(timestamp);
            if(formSubmitted.length < 1) continue;

            var editResponseUrl = formSubmitted[0].getEditResponseUrl();
            sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
        }
    }
}

什么都没有出现,当我检查触发器的日志时,一切正常,没有失败。我尝试将全局变量放在函数中,但没有任何变化。

标签: urlgoogle-apps-scriptgoogle-sheetsgoogle-forms

解决方案


以下几点取自@Rubén latest version on github的最新版本。这段代码是一件美丽的事情,令人赏心悦目。结合 Rubén 的详细说明,这个答案可以在不到 5 分钟的时间内完成设置和运行。


  1. 更改
    var formID = '__Your ID__';

    var formURL = 'https://docs.google.com/forms/d/ -insert id - /edit';
    从表单编辑器页面获取 URL。

  1. 更改 var columnName = 'Form URL';

    var sheetName = 'URL'; // Column U

  1. getEditResponseUrls完全替换

function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
  var columnIndex = headers[0].indexOf(columnName);
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = startRow-1; i < data.length; i++) {
    if(data[i][0] != '' && data[i][columnIndex] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if(formSubmitted.length < 1) continue;
      var editResponseUrl = formSubmitted[0].getEditResponseUrl();
      sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
    }
  }
}

  1. 请记住设置可安装触发器。

推荐阅读