我正在使用Google脚本将Google表单的网址成功获取到Google电子表格。但是,我必须手动单击“在Google脚本中运行”才能获取网址。
当有人单击Google表单中的“提交”按钮时,如何自动获取网址?
下面是我的脚本代码
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表单的网址。我必须手动单击运行脚本才能在电子表格中获取网址
答案 0 :(得分: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;
}
}
}