事件对象不传递给脚本
Event object doesn't pass to script
我们有很多 google 表格和相关的答案文件。所有包含答案的电子表格文件都包含一个 GScript,它 运行 通过触发“发送表单”
但是只有一种形式停止了 运行 这个脚本。答案写入电子表格
正确,但相关脚本似乎没有执行。
此脚本接收对象触发事件并发送包含最后一行的电子邮件
电子表格
function sendFormByEmail(e) {
var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
....
....
GmailApp.sendEmail(email, subject,messageTxt,{'htmlBody':messageHTML,'name': 'HR-bot'});
}
太奇怪了,我们在其他电子表格中完全相同的脚本,而且运行完美!
此外,如果评论所有此脚本并仅留下带有 GmailApp.sendEmail 的行并发送 GoogleForm ,答案将正确写入电子表格但触发 "On send form" 可能不会发生甚至那一行也不执行
感谢帮助
P.S。如何调试这种需要 Event Object Argument 的脚本?
感谢 Rubén ,我使用了这种方法 How can I test a trigger function in GAS?
这就是我的结果:
var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
var data = dataRange.getValues();
var lastRow = data[data.length-1];
var headers = data[0];
for (var row=1; row < data.length; row++) {
var e = {};
e.values = data[row].filter(Boolean);
e.range = dataRange.offset(row,0,1,data[0].length);
e.namedValues = {};
// Loop through headers to create namedValues object
// NOTE: all namedValues are arrays.
for (var col=0; col<headers.length; col++) {
e.namedValues[headers[col]] = [data[row][col]];
}
}
lastRow 变量包含 lastRow 的值,使用 Debug 我发现我的所有代码都完美无缺
不小心我重新创建了答案文件并删除了表单和答案文件之间的连接
创建新的应答文件并放入我的代码中。它有效!
总结:如果您认为您的答案文件没有传递触发事件对象,甚至没有 运行 a .gs "On send form" - 只需清除表单中的答案并将其附加到绝对新应答文件
我们有很多 google 表格和相关的答案文件。所有包含答案的电子表格文件都包含一个 GScript,它 运行 通过触发“发送表单”
但是只有一种形式停止了 运行 这个脚本。答案写入电子表格 正确,但相关脚本似乎没有执行。
此脚本接收对象触发事件并发送包含最后一行的电子邮件 电子表格
function sendFormByEmail(e) {
var s = SpreadsheetApp.getActiveSheet();
var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
....
....
GmailApp.sendEmail(email, subject,messageTxt,{'htmlBody':messageHTML,'name': 'HR-bot'});
}
太奇怪了,我们在其他电子表格中完全相同的脚本,而且运行完美!
此外,如果评论所有此脚本并仅留下带有 GmailApp.sendEmail 的行并发送 GoogleForm ,答案将正确写入电子表格但触发 "On send form" 可能不会发生甚至那一行也不执行
感谢帮助
P.S。如何调试这种需要 Event Object Argument 的脚本?
感谢 Rubén ,我使用了这种方法 How can I test a trigger function in GAS?
这就是我的结果:
var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
var data = dataRange.getValues();
var lastRow = data[data.length-1];
var headers = data[0];
for (var row=1; row < data.length; row++) {
var e = {};
e.values = data[row].filter(Boolean);
e.range = dataRange.offset(row,0,1,data[0].length);
e.namedValues = {};
// Loop through headers to create namedValues object
// NOTE: all namedValues are arrays.
for (var col=0; col<headers.length; col++) {
e.namedValues[headers[col]] = [data[row][col]];
}
}
lastRow 变量包含 lastRow 的值,使用 Debug 我发现我的所有代码都完美无缺 不小心我重新创建了答案文件并删除了表单和答案文件之间的连接 创建新的应答文件并放入我的代码中。它有效!
总结:如果您认为您的答案文件没有传递触发事件对象,甚至没有 运行 a .gs "On send form" - 只需清除表单中的答案并将其附加到绝对新应答文件