这是我的演示表和表格,可以帮助您理解我的问题。我已经在工作表上编写了一个应用程序脚本来生成 URL。实际上,我正在处理另一张纸,上面有数千条记录。为了生成响应的 URL 链接,该脚本需要很长时间,因此我们无法正常工作。 这就是为什么我希望脚本只生成特定响应的 URL,而不是全部。请各位帮忙!
表格:- https://docs.google.com/forms/d/1Qw6z_ZoCF7iFsseIKXXfhU5k0n7hT5-HGN_049ApagY/edit
工作表:- https://docs.google.com/spreadsheets/d/1KhTQk9i4PHEeNECY3BdbM04gAOKLGboUe8b2ZHng3po/edit#gid=836881824
我想要的脚本只生成特定响应的 URL,而不是全部。请各位帮忙!
下面的应用程序脚本代码将仅获取电子表格上选定行的编辑表单 URL。确保所选行是连续的,然后运行函数 selectedRows()。我也将该脚本添加到 Apps 脚本编辑器中以进行测试。使用 onOpen() 函数在自定义菜单中添加此函数可能会有所帮助。
function selectedRows() {
var startingRow = SpreadsheetApp.getActiveRange().getRow();
var rowCount = SpreadsheetApp.getActiveRange().getNumRows();
var form = FormApp.openById('1Qw6z_ZoCF7iFsseIKXXfhU5k0n7hT5-HGN_049ApagY');
//enter form ID here
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test1');
//Change the sheet name as appropriate
var dataRaw = sheet.getRange(startingRow,1,rowCount).getValues()
dataRaw = dataRaw.flat();
var data = [];
//Set milliseconds for each timestamp and push to new array data
for (var y = 0; y < dataRaw.length; y++){
data.push(dataRaw[y].setMilliseconds(0));
}
Logger.log(data)
var urlCol = 4; // column number where URL's should be populated; A = 1, B = 2 etc
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [];
Logger.log(responses[0].getTimestamp().setMilliseconds(0))
//Loop through each time stamp in data and check it against all timestamps in response array. If it matches push the timestamp to the urls array
for (var i = 0; i < data.length; i++) {
for (var x = 0; x < responses.length; x++){
Logger.log("Form Stamp: " + responses[x].getTimestamp().setMilliseconds(0));
Logger.log("Data Stamp: " + data[i]);
if(responses[x].getTimestamp().setMilliseconds(0) == data[i]){
urls.push([responses[x].getEditResponseUrl()]);
}
}
}
Logger.log(urls)
//Set the edit URLs on the spreadsheet
sheet.getRange(startingRow,urlCol,dataRaw.length).setValues(urls);
}