url - 如何在电子表格中获取可编辑表单响应的 URL
问题描述
我试图让可编辑的谷歌表单响应的 URL 显示在谷歌表格中,但它似乎不起作用。
我看过Awesome Table和Ruben 的例子。基于这两个链接和其他一些链接,它们似乎适用于单一形式的响应表,但不是多个。
我第一次尝试了这段代码:
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);
}
}
}
什么都没有出现,当我检查触发器的日志时,一切正常,没有失败。我尝试将全局变量放在函数中,但没有任何变化。
解决方案
以下几点取自@Rubén latest version on github的最新版本。这段代码是一件美丽的事情,令人赏心悦目。结合 Rubén 的详细说明,这个答案可以在不到 5 分钟的时间内完成设置和运行。
- 更改
var formID = '__Your ID__';
为
var formURL = 'https://docs.google.com/forms/d/ -insert id - /edit';
从表单编辑器页面获取 URL。
- 更改
var columnName = 'Form URL';
为
var sheetName = 'URL'; // Column U
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);
}
}
}
- 请记住设置可安装触发器。
推荐阅读
- makefile - 你能明确声明一个提到的文件 .INTERMEDIATE 吗?
- c# - 如何获取每个月底的最后一行
- swift - 从 Swift 处理 FSEventStreamRef API 中的选项
- ethereum - 使用 Web3 调用智能合约函数
- python - PyQt5 - QPushButton.pressed() 信号/插槽未更新 QLabel 小部件
- spring - 他们是否有任何替代方法可以将资源过滤与 Maven 一起用于 Spring Boot 应用程序?
- scheduler - 在谷歌云 sql 中调度函数 - Postgresql DB
- python-3.x - 数据和 X 轴标签不对齐
- ios - 如何将我的类对象转换为 JSON for Alamofire
- ms-word - 如何定义自定义高亮颜色?