google-apps-script - 如果表单设置为收集电子邮件,则通过 Google Apps 脚本提交 Google 表单会失败

标签 google-apps-script form-submit google-forms

通过 Apps 脚本提交表单时,如果表单设置为收集用户电子邮件以进行响应,则代码会失败并显示错误:

"Sorry, the form response could not be submitted. Please wait a few minutes and try again."

我认为 Google 可能已经改变了一些东西,因为去年有效的代码今年不起作用。

错误点位于代码中的“提交”行。或者有时,代码运行,但工作表或表单本身的“响应”中仍然没有任何内容。

如果我关闭收集电子邮件的选项,它会正常运行,并且我会在 Google 表格中看到提交的内容,只是没有电子邮件地址。

我设置了一个测试表单,将其附加到新的 Google 工作表以进行响应,然后粘贴到我的代码中:

function codeVoteDoVoteByForm()
{
  
  // Get the Yes/No Google form
  var myForm = FormApp.openById('File ID Here')

  // Get a list of questions on it
  var questions = myForm.getItems()
 
  // Get question 0 (only one on this form) and mark it as multiple choice
  var qt = questions[0].asMultipleChoiceItem()
  
  // Set the users vote
  var qr = qt.createResponse("I am here")
  
  //Create the response
  var FormResponse = myForm.createResponse()
  var testemail = FormResponse.getRespondentEmail()
  // Submit the response
  FormResponse.withItemResponse( qr );
  var myResponse = FormResponse.submit()
  
  var responseString = myResponse.getTimestamp()
  return "Vote recorded at " + responseString
  
}

我的想法是 Google 改变了一些东西,所以现在运行脚本时它无法获取表单响应的用户电子邮件地址,但我找不到任何文档来确认这一点。

有什么想法吗?

最佳答案

我认为问题在于,当您向具有收集电子邮件或经过身份验证的用户限制的表单发送回复时,而不添加电子邮件或对用户进行身份验证。不幸的是,我认为不可能使用 API 发送此类信息,因此就我而言:

  • 我已禁用限制,下一步
  • 我已将回复发送至表单,最后
  • 我再次启用限制

    //disable restrictions temporaly
    form.setLimitOneResponsePerUser(false);
    form.setRequireLogin(false);
    form.setCollectEmail(false);
    
    var questions = form.getItems();
    
    var formResponse = form.createResponse();
    
    for (var i=0; i<questions.length; i++){
    
      var question = questions[i].asMultipleChoiceItem();
      var response = question.createResponse(correctAnswers[i]);
    
      formResponse.withItemResponse(response);
    }
    
    formResponse.submit();
    
    form.setLimitOneResponsePerUser(true);
    form.setRequireLogin(true);
    form.setCollectEmail(true); 
    

关于google-apps-script - 如果表单设置为收集电子邮件,则通过 Google Apps 脚本提交 Google 表单会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50106678/

相关文章:

multithreading - 如何并行执行自定义函数公式,同时保持Google表格的可共享性和非许可性?

html - 根据谷歌脚本中的图像大小调整行大小

php - 防止在 Ajax 中提交表单

javascript - 如何使用 Javascript 在 Google 表单上发送对多选问题的回复

google-apps-script - 使用 Google Apps 脚本从网页提取数据时的字符编码问题

javascript - MailApp.sendEmail l 不再工作(谷歌应用程序脚本)

javascript - 尝试用 greasemonkey 模拟按钮的点击

javascript - Chrome 上的 Jquery Form.submit() 有效但在 Firefox 中无效

google-apps-script - 使用 google apps 脚本添加大量响应

google-apps-script - 如何在 Google 脚本编辑器中收集来自动态表单的回复