onSubmit触发器:窗体的GetEditResponseUrl有时无法执行

时间:2019-02-10 22:25:46

标签: google-apps-script

我希望用户能够从此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());

}

1 个答案:

答案 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");
  }
}