【发布时间】:2019-08-14 19:18:46
【问题描述】:
我有兴趣对代码的snippet 进行一些更改,以便您记录 URL 以编辑 Google 表单的响应。
我希望实现的是在表单提交时接收这些 URL 的可重复自动化过程。 但是,我要遵循的一个条件是将这些 URL 粘贴到电子表格的第一列,以保持以下列中现有数据的完整性。
我认为这对我来说是唯一可行的选择,因为表单仍处于开发阶段,随着时间的推移可能会收到更多变量。
我已经尝试过:
在响应的 Google 表格中手动插入一列,然后尝试设置
assignEditUrls{}函数,但没有产生任何结果。使用一次性迷你函数插入最左边的列,然后运行代码。也没有产生任何结果,除非它被包含在 main 函数中,然后每次提交时都会插入最左边的列。
是这样的:
function insertLeftMostColumn(){
//insert a column before the first one
sheet.insertColumnBefore(1);
//rename the header for the new column
var cell = sheet.getRange("A1");
cell.setValue("columnName");
}
这是函数。
function assignEditUrls() {
var form = FormApp.openById('1cg7bGRQjsv91sSCjYCwNJyoB3wN_MZ_9raV3tP3v1MA');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
var lastColumn = sheet.getLastColumn(); // This logs the value of the very last column of this sheet (without the values)
//Change the sheet name as appropriate
var data = sheet.getDataRange().getValues();
var urlCol = 5;
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);
}
【问题讨论】:
-
欢迎。你的问题是什么?换句话说,你在哪里卡住了?
-
嗨,@Rubén!用外行的话来说,我希望将 URL 存储在第一列中,然后是所有其他列。但是我无法通过在提交谷歌表单时继续自动记录答案的方式来实现这一点。让我知道这是否有意义?谢谢。
-
您需要使用 onFormSubmit 可安装触发器。详情见Show URL used to edit responses from a Google Form in a Google Spreadsheet by using a script
标签: google-apps-script google-apps google-forms