Lee*_*bel 5 form-submit google-apps-script google-forms
通过 Apps 脚本提交表单时,如果表单设置为收集用户电子邮件以进行回复,则代码将失败并显示错误:
“抱歉,无法提交表单回复。请等待几分钟,然后重试。”
我认为谷歌可能已经改变了一些东西,因为去年运行的代码今年不起作用。
错误指向代码中的“提交”行。或者有时,代码运行,但仍然没有出现在工作表中,或者在表单本身的“响应”中。
如果我关闭收集电子邮件的选项,它运行良好,我会在 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
}
Run Code Online (Sandbox Code Playgroud)
我的想法是谷歌改变了一些东西,所以现在运行脚本时它无法获取用户的电子邮件地址以获取表单响应,但我找不到任何文档来确认这一点。
有什么想法吗?
我认为问题在于,当您向具有收集电子邮件或经过身份验证的用户限制的表单发送回复时,而不添加电子邮件或对用户进行身份验证。不幸的是,我认为不可能使用 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);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |