如何以与表单中问题相同的顺序访问 Google 表单密钥对值
How to access Google Form key-pair values with the same order as the questions in the form
我在 Google Sheet 中使用以下 onSubmit(e) 脚本 运行 从 Google 表单提交中访问密钥对值。然后将它们放入 HTML 列表并通过电子邮件发送。到目前为止,一切都很好。每次提交表单时,我都会收到一封电子邮件通知,其中列有问题和答复。
问题:对的顺序是随机的,并且随着每次提交而改变。我希望它与表单上的问题顺序相同,从上到下。
这是基本的工作脚本(减去我的详细信息):
function onFormSubmit(e) {
var values = e.namedValues;
var sendFrom = '';
var ccEmail = '';
var subject = '';
var htmlBody = '<ul>';
for (Key in values) {
var label = Key;
var data = values[Key];
htmlBody += '<li>' + label + ": " + data + '</li>';
};
htmlBody += '</ul>';
MailApp.sendEmail(sendFrom, subject, htmlBody, {
htmlBody: htmlBody,
cc: ccEmail,
name: 'Automated Email',
noReply: true
});
}
表格中的实际问题顺序(前 5 个问题):
- Class
- 老师
- 学号
- 名字
- 姓氏
等等
下面是一个示例通知电子邮件,问题的顺序是随机的:
- 这名学生在以下方面引起了关注area/s::缺乏进展,没有完成classwork/refusal参与,相机经常关闭
- 名字:约翰
- Class : 等级 ABC
- 学号:1234
- 老师:JF
- 老师点评:...
- 迄今为止教师的行为(N/A 如果学生缺席):...
- 操作结果:...
- 时间戳:2021 年 9 月 14 日9:06:58
- 姓氏:史密斯
- 首选姓名:约翰尼
我猜 namedValues 对象是异步创建的还是什么?无论如何要锁定它以匹配表单上的顺序,或者首先访问表单上的问题顺序然后映射到它?显然不想在这里对键进行硬编码,在表单上进行一次编辑,它就坏了...
恐怕有点超出我的脚本编写水平。任何帮助表示赞赏!
这个问题 post 已经被别人 post 解决了两年,但 post 没有答案。
使用 e.values
数组而不是 e.namedValues
对象。在数组中,值的显示顺序与它们存储在电子表格中的顺序相同。要获取字段名称,请使用 SpreadsheetApp.getActive().getRange('Form Responses 1!A1:1').getValues()[0]
.
请参阅 event objects 帮助页面。
感谢 doubleunary 的解决方案。这是工作代码:
function onFormSubmit(e) {
//access the values only in original order
var values = e.values;
var vlen = values.length;
//access the headers from the response sheet (i.e. questions)
var fields = SpreadsheetApp.getActive().getRange('sheetName!A2:K2').getValues()[0];
var i;
var htmlBody = '<ul>';
//loop through headers + values to build HTML list
for (i=0;i<vlen;i++) {
var label = fields[i];
var data = values[i];
htmlBody += '<li>' + label + ": " + data + '</li>';
};
htmlBody += '</ul>';
var recipientsTO = "someoneelse1@xyz"+","+"someoneelse2@xyz";
MailApp.sendEmail({
to:"me@xyz",
bcc:recipientsTO,
subject: "Language Division RIC",
htmlBody: htmlBody
})
}
我在 Google Sheet 中使用以下 onSubmit(e) 脚本 运行 从 Google 表单提交中访问密钥对值。然后将它们放入 HTML 列表并通过电子邮件发送。到目前为止,一切都很好。每次提交表单时,我都会收到一封电子邮件通知,其中列有问题和答复。
问题:对的顺序是随机的,并且随着每次提交而改变。我希望它与表单上的问题顺序相同,从上到下。
这是基本的工作脚本(减去我的详细信息):
function onFormSubmit(e) {
var values = e.namedValues;
var sendFrom = '';
var ccEmail = '';
var subject = '';
var htmlBody = '<ul>';
for (Key in values) {
var label = Key;
var data = values[Key];
htmlBody += '<li>' + label + ": " + data + '</li>';
};
htmlBody += '</ul>';
MailApp.sendEmail(sendFrom, subject, htmlBody, {
htmlBody: htmlBody,
cc: ccEmail,
name: 'Automated Email',
noReply: true
});
}
表格中的实际问题顺序(前 5 个问题):
- Class
- 老师
- 学号
- 名字
- 姓氏 等等
下面是一个示例通知电子邮件,问题的顺序是随机的:
- 这名学生在以下方面引起了关注area/s::缺乏进展,没有完成classwork/refusal参与,相机经常关闭
- 名字:约翰
- Class : 等级 ABC
- 学号:1234
- 老师:JF
- 老师点评:...
- 迄今为止教师的行为(N/A 如果学生缺席):...
- 操作结果:...
- 时间戳:2021 年 9 月 14 日9:06:58
- 姓氏:史密斯
- 首选姓名:约翰尼
我猜 namedValues 对象是异步创建的还是什么?无论如何要锁定它以匹配表单上的顺序,或者首先访问表单上的问题顺序然后映射到它?显然不想在这里对键进行硬编码,在表单上进行一次编辑,它就坏了...
恐怕有点超出我的脚本编写水平。任何帮助表示赞赏!
这个问题 post 已经被别人 post 解决了两年,但 post 没有答案。
使用 e.values
数组而不是 e.namedValues
对象。在数组中,值的显示顺序与它们存储在电子表格中的顺序相同。要获取字段名称,请使用 SpreadsheetApp.getActive().getRange('Form Responses 1!A1:1').getValues()[0]
.
请参阅 event objects 帮助页面。
感谢 doubleunary 的解决方案。这是工作代码:
function onFormSubmit(e) {
//access the values only in original order
var values = e.values;
var vlen = values.length;
//access the headers from the response sheet (i.e. questions)
var fields = SpreadsheetApp.getActive().getRange('sheetName!A2:K2').getValues()[0];
var i;
var htmlBody = '<ul>';
//loop through headers + values to build HTML list
for (i=0;i<vlen;i++) {
var label = fields[i];
var data = values[i];
htmlBody += '<li>' + label + ": " + data + '</li>';
};
htmlBody += '</ul>';
var recipientsTO = "someoneelse1@xyz"+","+"someoneelse2@xyz";
MailApp.sendEmail({
to:"me@xyz",
bcc:recipientsTO,
subject: "Language Division RIC",
htmlBody: htmlBody
})
}