cho*_*opz 7 google-sheets google-apps-script google-forms
我已经制作了一个表格来捕获2个数据.
每个组都有自己的电子表格.[根据发布的代码,每个都有自己的片材相同的内电子表格.]
当用户提交表单时,表单应捕获电子邮件地址,并将数据发送到用户订阅的相应电子表格.
这就是我到目前为止所做的.我被困了..
有没有办法专门从特定的文本框/选项..etc中检索数据?
我知道的唯一方法是循环所有数据并逐个检索它...这使我很难将2个数据链接在一起......例如: "johndoh@email.com" subscribed to "Group 1"
function onFormSubmit() {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
// Checks if it is multiple choice option
if (itemResponse.getItem().getType() == FormApp.ItemType.MULTIPLE_CHOICE) {
// If user chooses group 1, open spreadsheet and store user's email in 1st column
if (itemResponse.getResponse() == "1") {
var ss = SpreadsheetApp.openById("id goes here");
var sheet = ss.getSheetByName("Group subscription email");
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mog*_*dad 15
有没有办法专门从特定的文本框/选项..etc中检索数据?
是的,它将简化您的任务.相关文档是事件对象.
触发时,触发器功能将被提供一个事件对象.在您的情况下,表单表单提交事件,该事件包括可由属性访问的FormResponse对象response.无需循环响应或打开表单.
由于我们可以从单个响应中获取电子邮件和组,因此将两者联系起来变得微不足道.您将看到一个帮助函数用于获取相应工作表上的句柄以添加订阅.
只要您的问题是必需的,返回的数组getItemResponses()将按照它们在表单中出现的顺序包含项目响应.
/**
* Trigger function for Google Forms "Form submit" event.
* Simple, assumes all answers are provided, no error checking.
*/
function onFormSubmit(e) {
var formResponse = e.response;
// If all questions are required, getItemResponses returns responses in form-order
var itemResponses = formResponse.getItemResponses();
var email = itemResponses[0].getResponse(); // returns a string
var group = itemResponses[1].getResponse();
var sheet = getGroupSheet( group ); // use helper function to get right sheet
if (sheet) {
sheet.appendRow([email]); // Add subscriber as a single-cell row
}
}
/**
* Gets the sheet for the indicated group.
* Helper function for onFormSubmit().
*
* @param {string} group The ID of the group, from user's response
*
* @returns {Sheet} Sheet object for the given group,
* null if group is unknown.
*/
function getGroupSheet( group ) {
var ssId = "id goes here";
switch (group) {
case "1":
var name = "Group subscription email";
break;
// case "2": // Add cases to handle other groups
// var name = "Other sheet name";
// break;
default: // If the group is unknown, log it
name = "";
Logger.log("Unexpected group ID ("+group+")");
break;
}
if (name) {
var result = SpreadsheetApp.openById(ssId).getSheetByName(name);
}
else {
result = null; // Return null for unknown groups
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
知道所有响应项目都存在确实使事情变得简单,但我们不能总是依赖于此.如果有可能将响应项留空,我们需要获得具体答案.
有几种方法可以做到这一点.我们来看看两个.首先,使用项目索引:
/**
* Trigger function for Google Forms "Form submit" event.
* Flexible - checks for specific response items by getting the item index
* for each response item. Example: if user answered questions 1 and 3, but not 2,
* e.response would contain itemResponses for items 0 and 2, but not 1.
*/
function onFormSubmit2(e) {
var formResponse = e.response;
var itemResponses = formResponse.getItemResponses();
for (var i=0; i<itemResponses.length; i++) {
switch (itemResponses[i].getItem().getIndex()) {
case 0:
var email = itemResponses[i].getResponse(); // returns a string
break;
case 1:
var group = itemResponses[i].getResponse();
break;
}
}
var sheet = getGroupSheet( group ); // use helper function to get right sheet
if (sheet) {
sheet.appendRow([email]); // Add subscriber as a single-cell row
}
}
Run Code Online (Sandbox Code Playgroud)
使用索引使我们免于提供所有答案的要求,但仍然很脆弱; 如果表单被修改,则需要维护工作,以确保索引保持一致.
我们可以使用的改进是使用问题的文本来选择我们的回答.如果问题被重新编码,我们仍然需要小心 - 但这种方法可以适应顺序或问题的变化或添加非问题项目(如图像,分页符,视频或标题).
/**
* Trigger function for Google Forms "Form submit" event.
* More Flexible - checks for specific response items by getting the item title
* for each response item. No need to know the exact order of questions this way,
* as long as we know what the question was. (Ideal if the form is
* created programmatically.)
*/
function onFormSubmit3(e) {
var formResponse = e.response;
var itemResponses = formResponse.getItemResponses();
for (var i=0; i<itemResponses.length; i++) {
switch (itemResponses[i].getItem().getTitle()) {
case "Email Address":
var email = itemResponses[i].getResponse(); // returns a string
break;
case "Group":
var group = itemResponses[i].getResponse();
break;
}
}
var sheet = getGroupSheet( group ); // use helper function to get right sheet
if (sheet) {
sheet.appendRow([email]); // Add subscriber as a single-cell row
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16297 次 |
| 最近记录: |