检索 google 表单编辑网址并维护现有数据结构
retrieve google forms edit urls and maintain existing data structure
我有兴趣对允许您记录 URL 以编辑 Google 表单响应的代码进行一些改动。snippet。
我希望实现的是在表单提交时接收这些 URL 的可重复自动化过程。 但是,我要遵循的一个条件是将这些 URL 粘贴到电子表格的第一列中,以保持后续列中现有数据的完整性。
我认为这是我唯一可行的选择,因为表单仍处于开发阶段,随着时间的推移可能会收到更多变数。
我尝试过:
在 Responses 中手动插入一列 Google Sheet 然后尝试设置 assignEditUrls{}
函数,但没有产生任何结果。
使用一次性迷你函数插入最左边的列,然后 运行 代码。也没有产生任何结果,除非它被包含在主函数中,然后每次有提交时插入最左边的列。
这是:
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);
}
如果我的理解是正确的,您想知道如何在第一列而不是最后一列中插入编辑 URL。
如果是这样,您需要在代码中进行一些小的修改:
在 sheet 中插入一个空列,例如使用函数 insertLeftMostColumn()
,如上所示。请记住,如果你只想运行函数一次,它需要与assignEditUrls()
分开调用,所以你必须在函数[=21]中再定义一次sheet
=]
urlCol
是列号,要粘贴网址。要将列更改为第一列,请将 var urlCol = 5;
修改为 var urlCol = 1;
data[j][0]?urls[timestamps.indexOf(data[j][0]
尝试在第一列中查找时间戳。
鉴于您插入了一个空列并且时间戳已移至第二列 - 您需要将代码更改为 data[j][1]?urls[timestamps.indexOf(data[j][1];
如果您希望每次提交表单时都插入新的 URL,您需要在 assignEditUrls()
函数中加入一个 Form Submit
触发器。 Here 您可以找到有关如何合并可安装触发器的信息。
我有兴趣对允许您记录 URL 以编辑 Google 表单响应的代码进行一些改动。snippet。
我希望实现的是在表单提交时接收这些 URL 的可重复自动化过程。 但是,我要遵循的一个条件是将这些 URL 粘贴到电子表格的第一列中,以保持后续列中现有数据的完整性。
我认为这是我唯一可行的选择,因为表单仍处于开发阶段,随着时间的推移可能会收到更多变数。
我尝试过:
在 Responses 中手动插入一列 Google Sheet 然后尝试设置
assignEditUrls{}
函数,但没有产生任何结果。使用一次性迷你函数插入最左边的列,然后 运行 代码。也没有产生任何结果,除非它被包含在主函数中,然后每次有提交时插入最左边的列。
这是:
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);
}
如果我的理解是正确的,您想知道如何在第一列而不是最后一列中插入编辑 URL。
如果是这样,您需要在代码中进行一些小的修改:
在 sheet 中插入一个空列,例如使用函数
insertLeftMostColumn()
,如上所示。请记住,如果你只想运行函数一次,它需要与assignEditUrls()
分开调用,所以你必须在函数[=21]中再定义一次sheet
=]urlCol
是列号,要粘贴网址。要将列更改为第一列,请将var urlCol = 5;
修改为var urlCol = 1;
data[j][0]?urls[timestamps.indexOf(data[j][0]
尝试在第一列中查找时间戳。鉴于您插入了一个空列并且时间戳已移至第二列 - 您需要将代码更改为
data[j][1]?urls[timestamps.indexOf(data[j][1];
如果您希望每次提交表单时都插入新的 URL,您需要在
assignEditUrls()
函数中加入一个Form Submit
触发器。 Here 您可以找到有关如何合并可安装触发器的信息。