我有一个带有两个数字字段的Google表单,因此在答案目标电子表格中我有三列:SUBMIT-DATE,NUM1,NUM2
我使用以下公式添加第四列TOT,而不是表单中的字段:
ARRAYFORMULA(B2:B+C2:C)
所以在第四列中,每行都有一个SUM
我将此脚本绑定到电子表格:
function onFormSubmit(e){
var subject = "TRY GAS";
var body = e.namedValues['NUM1']+ "+" +e.namedValues['NUM2']+ "=" +e.namedValues[TOT];
MailApp.sendEmail("admin@example.com", subject, body);
}
我为onFormSubmit
设置了触发器但我收到的电子邮件是:
34+43=
在TOTAL列下的电子表格中,显示77。
我认为问题是var e.namedValues不包含TOT,因为它不是表单字段
如何在表单提交上传递此值??
答案 0 :(得分:0)
当您使用e.namedValues['NUM1']
时,您将获得" namedValues" e
对象的属性,实际上是来自表单的响应。
我'我对你得到的结果感到非常惊讶,因为这个对象中的属性也被称为" TOT" ...
通常它应该返回" undefined"明显。然而,这不是你真正的问题,你想要的只是两个值的数字和,你可以这样得到它们:
var sum = Number(e.namedValues['NUM1'])+Number(e.namedValues['NUM2']);// Number is mandatory because object properties are strings in this context.
,您的电子邮件正文将成为
var body = e.namedValues['NUM1']+ "+" +e.namedValues['NUM2']+ "=" +sum;
答案 1 :(得分:0)
你的猜测是对的;由于您感兴趣的列超出了填充表单响应的列范围,因此它不会出现在事件对象中。但是,事件对象的range
属性会告诉您收到提交的行,您可以选择相对于该行的其他单元格。
哪一栏包含" TOT"?如果该列位于我们上一个表单响应列的右侧,那么我们可以使用该列的响应项(e.values.length
)到offset的数量。
function onFormSubmit(e){
var subject = "TRY GAS";
var total = e.range.offset(0, e.values.length, 1, 1).getValue();
var body = e.namedValues['NUM1']+ "+" +e.namedValues['NUM2']+ "=" +total;
MailApp.sendEmail("admin@example.com", subject, body);
}
警告:在此触发器功能运行时,可能尚未计算总数并将其存储回电子表格。您可能会发现需要将getValue()
呼叫延迟几秒钟。即使这样,它也可能不可靠 - 在这种情况下,您会发现@Sergeinsas建议的函数计算方法会更有效。
答案 2 :(得分:0)
我刚刚找到@Mogsdad的相同解决方案,所以我写了这个:
function onFormSubmit(e){
//THE SHEETS WHERE RESPONSE IS STORED
var sheet = e.range.getSheet();
//SHEET HEADERS
var headers = sheet.getRange("1:1").getValues()[0];
//THE DIFFERENCE BETWEEN SHEET WIDTH AND FORM COLUMNS
var off = headers.length;
//WAIT DATA
Utilities.sleep(30000);
//OFFSET FORM RANGE ON RIGHT BY off TO ADD ALL CUSTOM COLUMN
var data = e.range.offset(0, 0, 1, off).getValues()[0];
//CREATE OBJECT WITH NAMED VALUES
var namedValues = {};
for(var col in headers)
namedValues[headers[col]] = data[col];
//LOG
var subject = "TRY GAS";
var body = namedValues["NUM1"] + ' + ' + namedValues["NUM2"] + ' = ' + namedValues["TOT"];
MailApp.sendEmail("admin@example.com", subject, body);
}
非常感谢,我需要使用replaceText()
从模板创建PDF