Google apps script 从谷歌表单收集回复?
我对谷歌脚本非常陌生,并试图学习,但文档要么相互冲突,要么不存在,要么不适合我 我们的目标是创建一个脚本,该脚本可以收集来自谷歌表单的响应,并根据其中一个用户输入字段(用户可以在其中选择位置的下拉框)发送电子邮件。问题是我无法检索表单响应。我收到一个错误,“getItemResponses();”不是函数。我如何从表格中获得回复?所有其他的部分我都知道了 流-我已经设置了一个触发器,通过编辑->当前项目的触发器->创建一个新的触发器,在提交时它运行我的函数。应该发生的是(在脚本的后面)sendMail以我的身份向var“应答者”发送邮件消息。但是,在尝试从脚本编辑器运行并填写测试表单提交(通过后者上的电子邮件)时,我收到的错误“getItemResponses();”不是一个函数 谢谢你事先的帮助。请注意,我是谷歌脚本的新手Google apps script 从谷歌表单收集回复?,google-apps-script,Google Apps Script,我对谷歌脚本非常陌生,并试图学习,但文档要么相互冲突,要么不存在,要么不适合我 我们的目标是创建一个脚本,该脚本可以收集来自谷歌表单的响应,并根据其中一个用户输入字段(用户可以在其中选择位置的下拉框)发送电子邮件。问题是我无法检索表单响应。我收到一个错误,“getItemResponses();”不是函数。我如何从表格中获得回复?所有其他的部分我都知道了 流-我已经设置了一个触发器,通过编辑->当前项目的触发器->创建一个新的触发器,在提交时它运行我的函数。应该发生的是(在脚本的后面)sendM
function sendEmails(e) {
// Get active form and responses
var formResponse = e.response;
var itemResponses = formResponse.getItemResponses();
// Assign responses to variables
var respondent = itemResponses[0].getResponse();
var district = itemResponses[1].getResponse();
var urgency = itemResponses[2].getResponse();
var type = itemResponses[3].getResponse();
var topic = itemResponses[4].getResponse();
// TAM email address. Used in sendTo field later
var sendTo = "person@email.com";
MailApp.sendEmail(sendTo,"subject","message body");
if(type == "Option 1") {
MailApp.sendEmail(respondent,"subject","message body");
}
}
问题:
form.getResponses()
返回一个FormResponse
数组,如您所见。响应数组没有名为getItemResponses()
的方法,这就是您编写代码失败的原因。您现在要做的是获取与表单对应的所有响应,而不是刚刚提交的响应
您应该改用单一的方法
解决方案:
假设:
- 您希望每次提交表单时都运行脚本(如果满足条件,则发送电子邮件)
- 您已安装连接到表单的
FormResponse
。您应该替换此:
var form=FormApp.getActiveForm();
var formResponses=form.getResponses();
var itemResponses=formResponses.getItemResponses();
为此:
var formResponse=e.response;
var itemResponses=formResponse.getItemResponses();
更新:
您的表单没有5项,但有4项。第一项实际上是响应者电子邮件,因此,必须通过以下方式检索。因此,itemResponses
只能访问索引3,而不能访问索引4,itemResponses[4]
未定义。这就是你新错误背后的原因。您应该这样做:
var-responder=formResponse.getRespondentEmail();
var district=itemResponses[0]。getResponse();
var=itemResponses[1]。getResponse();
var type=itemResponses[2]。getResponse();
var topic=itemResponses[3]。getResponse();
参考:
function onFormSubmit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var respSheet = ss.getSheetByName('Form responses 1');
var rowIndx = e.range.getRow();
var formData = respSheet.getRange(rowIndx, 1, 1, respSheet.getLastColumn()).getValues();
var respondent = formData[0].getResponse();
var district = formData[1].getResponse();
var urgency = formData[2].getResponse();
var type = formData[3].getResponse();
var topic = formData[4].getResponse();
MailApp.sendEmail(respondent, district + ' ' + topic, "Your reply was recieved and is being processed");
respSheet.getRange(rowIndx, 5).setValue('Email send to ' + respondent);
}
我认为提供当前脚本和复制问题的流程将帮助用户考虑解决方案。函数sendmails(e){//Get active form and responses var form=FormApp.getActiveForm();var formResponses=form.getResponses();var itemResponses=formResponses.getItemResponses();//将响应分配给变量var-responder=itemResponses[0]。getResponse();var-district=itemResponses[1]。getResponse();var-urrency=itemResponses[2]。getResponse();var-type=itemResponses[3]。getResponse();var-topic=itemResponses[4]。getResponse();}抱歉,不确定如何添加代码块……感谢您的回复。你能在你的问题中添加脚本吗?因为在评论中很难看到脚本。您可以通过编辑您的问题。您能否提供复制问题的详细流程?例如,如何运行函数
sendmails(e)
?添加了代码!所以剧本的另一部分只是一些学区和员工信息/电子邮件,我不想花时间删掉。最大的问题是,我收到的“getItemResponses();”不是一个函数,因此我无法提取用户的电子邮件和其他信息,这些信息是脚本未来将依赖的(并且可以工作)-使用Google Sheet对其进行测试非常感谢这很有意义!我已经根据你的建议进行了更改,这克服了这个问题,但现在打开了一个不同的问题。我收到一个错误“TypeError:无法读取未定义的属性'getResponse'”错误是由我的原始代码的第8行引起的-数组对象似乎未定义?(正在尝试添加代码)'var responder=itemResponses[0].getResponse();'@GabrielCirtwell您是否尝试过记录itemsresponses
?你得到了什么?另外,你能分享你正在工作的文件的一份经过消毒的副本(没有敏感信息),这样我就可以尝试重现这种行为吗?@lamblichus。我编辑了我的帖子来提供所有的代码(意识到很多都是我试图与其他人合作的评论,所以我只是删除了不必要的评论,并对需要做的小事情进行了清理)。我还没有尝试登录,但现在将尝试登录。谢谢你的回复,我会回复你的asap@GabrielCirtwell我的意思是分享表格本身。这就是问题所在。您安装了一个附加到此表单的onFormSubmit
触发器,而不是表单将响应发送到的电子表格,对吗?如果你能分享的话,我会尝试模仿你的行为,希望能找出失败的地方。就是这样!不知道为什么我的表单第一次不能工作-创建了一个新表单,复制/粘贴了原始代码,现在就可以工作了!非常感谢。标记y