在脚本中显示用于编辑Google电子表格中来自Google表单的响应的URL


11

我正在尝试使Google表单的编辑URL自动填充在其所附的响应Google表格中。我已经看过这个并且想使用它,但是在尝试弄清楚将脚本确切放置在哪里时遇到了问题。

我曾尝试将其放置在Google电子表格的脚本编辑器中,希望该URL显示在其中,但我不确定从何处去。在脚本编辑器中,我尝试将其作为附件进行测试,但最终没有奏效。

我对Google表格中的脚本和脚本编辑器经验不足。最后一点,我要在同一Google Spreadsheet中使用另一个名为AutoCrat的加载项。


除了您尝试的代码源链接之外,最好包含代码和进行测试的步骤。
鲁本

Answers:


16

简短答案

链接指向的问答有两个答案,但对我来说,没有一个答案是合适的。IE的答案之一的代码不完整,并且两个都发送电子邮件,因此采用方法太复杂而无法用作起点。

下面是一个易于采用的脚本。

使用说明

  1. 创建一个测试表单并记下表单ID(在URL 之间../d//editURL中)。 新形式

  2. 设置表单以将响应发送到新的电子表格。 连接电子表格

  3. 您将被重定向到新的电子表格。记下活动的工作表名称(如果需要,可以重命名),并在该列中添加标题以用于保存响应编辑URL,即Edit Url。注意:大写非常重要,因此在编写时要非常小心。 回应试算表

  4. 转到以Tools > Script editor添加绑定到电子表格的Google Apps脚本项目。 电子表格脚本

  5. 用下面的代码替换默认代码(切记根据您的情况编辑全局变量)。 脚本代码

  6. 保存该项目,然后添加一个可安装的表单首脑触发器(如果出现“需要授权”对话框,请单击“查看权限”,然后单击“允许”)。 表单提交触发器

  7. 提交一些示例响应以测试解决方案。

/*
 * Global Variables
 */

// Form URL
var formURL = 'https://docs.google.com/forms/d/form-id/viewform';
// Sheet name used as destination of the form responses
var sheetName = 'Form Responses 1';
/*
 * 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 = 'Edit Url' ;
// 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.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);
    }
  }
}

额外资源

我根据问答内容创建了要点。我正在研究这个b / c,以便在编写代码的最终用户之间更好地进行协作。


1
我知道了,这是工作表名称,然后在URL末尾取出了“ / viewform”。非常感谢!
尼克斯,

1
@Rubén-我乐于为您的精彩教程添加更多细节,因为当我自己遵循它时,我为其中的一些步骤而苦苦挣扎。
Sphinxxx '17

1
好。我更改代码的主要原因是为了防止将来Google的URL格式发生变化,表明您只能使用FormApp.openById()表单ID而不是FormApp.openByUrl()整个URL。我将在您的要旨上发表评论。
Sphinxxx '17

3
在我的Google脚本窗口中,“当前项目的触发器”位于“编辑”下。
dvb

1
@HoangTrinh见canEditResponse()
鲁本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.