我希望用户能够从此Google表单中编辑他们的回复,所以我想将编辑回复的网址放在回复表的第14列上。
我设置了一个触发器onSubmit。每次用户提交表单时,此功能都会运行。问题是,有时它会起作用并在第14列上设置编辑URL。但有时会引发错误:无法调用未定义的方法“ getEditResponseUrl”。
含义是:“ var rs = f.getResponses(timeStamp)[0];”时间戳之后无法获得响应。
我认为这与在Google端获取时间戳和延迟有关。我觉得,该函数从(e)获取时间戳,但在该时间戳之后看不到任何响应。
function onSubmit(e){
var rng = e.range; //Collects active range for event
var ss = SpreadsheetApp.getActiveSpreadsheet();//collects active spreadsheet object
var fUrl = ss.getFormUrl();//gets form url linked with active spreadsheet
var f = FormApp.openByUrl(fUrl);//opens form using form url
var timeStamp = new Date(e.namedValues.Timestamp[0]);//gets the timestamp of the form response
var rs = f.getResponses(timeStamp)[0]; //gets the first response after the
var row = e.range.getRow();
var sheet = ss.getSheetByName("All"); // responses sheet
sheet.getRange(row, 14).setValue(rs.getEditResponseUrl());
}
答案 0 :(得分:0)
这对我有用。不能完全确定为什么这种方式有效,而其他方法无效。也许是因为我直接从工作表中获取了时间戳,所以它并没有关闭1秒。以前,通过使用e对象,时间戳将减少一秒钟。
提交触发器时:
function onSubmit(e){
editBillingFormURLEncoded(e.range.getRow()); //pass in row to function
}
function editBillingFormURLEncoded(row){
var ss = SpreadsheetApp.openById(SheetID).getSheets()[0]; //Open First Sheet in Spreadsheet
var vals = ss.getRange(row,1,1,15).getValues();
var timeStamp = vals[0][0]; //first value of sheet is the timestamp
var googleFormUrl = ss.getFormUrl(); //get form linked to the spreadsheet
var googleForm = FormApp.openByUrl(googleFormUrl); //FormApp
try{
var formResponse = googleForm.getResponses(timeStamp)[0]; //get last response after timestamp
var responseUrl = formResponse.getEditResponseUrl(); //get the edit form URL
ss.getRange(row, 14).setValue(responseUrl); //setting the responseURL Value on 14th column of sheet
}
catch(error){
ss.getRange(row, 14).setValue("Failed");
}
}