对于一个新的课程项目,我要回到Google表格中的SendSmail的google脚本,该脚本在几年前运行得很好。 (来自https://medium.com/@sebfung/custom-emails-from-a-spreadsheet-b11ff050bc5f的原始代码)。现在我遇到了三个错误,无法弄清楚如何解决第三个错误。
完整代码如下。我的代码经验有限,但我认为我可以解决我遇到的前两个错误,因为它们很漂亮,而且我的学生可以解决。 (首先,我可以删除没有“ Split”的代码,该代码曾经使我在SendToName称呼中删除电子邮件地址的后半部分。其次,我可以删除“ replace”代码,将换行符切换为换行符)
但是我不知道如何解决第三个错误。最后一个命令(MailApp.SendEmail)中的内容给我一个“无效的电子邮件:未定义(第66行,文件“代码”))错误。
我看不到其中任何一个都是与电子表格相关的错误,因为我回到了几年前工作的较早的电子表格,而调试现在又出现了这三个错误。
我很乐意就前两个错误提出建议,但我确实最需要并重视有关第三个错误的帮助。除非修复它,否则我什至无法运行或测试任何东西。谢谢!
function sendEmail(to, score, questions, answer1, answer2, answer3, answer4, answer5) {
var ss = SpreadsheetApp.getActiveSheet();
var range = ss.getActiveRange();
var numRows = range.getNumRows();
var values = range.getValues();
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
var to = row[1];
var score = row[2];
var questions = row[3]
var answer1 = row[4];
var answer2 = row[5];
var answer3 = row[6];
var answer4 = row[7];
var answer5 = row[8];
var sendToName = to.split('@')[0];
// email content
var emailSubject = "Quiz 1 Response";
// plain text body - just in case receiver can't parse html formatted email
var plainTxtBody = "Hello " + sendToName + ",\n" +
"You scored:\n" + score + "\n" +
"The questions were:\n" + questions + "\n" +
"Your answer:\n" + answer1 + "\n" +
"Your answer:\n" + answer2 + "\n" +
"Your answer:\n" + answer3 + "\n" +
"Your answer:\n" + answer4 + "\n" +
"Your answer:\n" + answer5;
// html formatting isn't necessary, but nice for reading :)
var htmlBody = '<html><body>';
var htmlFooter = '</body></html>';
// replacing newline characters with paragraph breaks to make it more readable
var scoreHTML = score.replace(/\n/g, "</p><p>");
var questionsHTML = questions.replace(/\n/g, "</p><p>");
var answer1HTML = answer1.replace(/\n/g, "</p><p>");
var answer2HTML = answer2.replace(/\n/g, "</p><p>");
var answer3HTML = answer3.replace(/\n/g, "</p><p>");
var answer4HTML = answer4.replace(/\n/g, "</p><p>");
var answer5HTML = answer5.replace(/\n/g, "</p><p>");
var emailMessage = "<p>Hello " + sendToName + ",</p>" +
"<p><strong>You scored:</strong><p>" +
"<p>" + scoreHTML + "</p>" +
"<hr>" +
"<p><strong>Here are the questions--see the answer key on the Quiz 1 page on the wiki:</strong></p>" +
"<p>" + questionsHTML + "</p>" +
"<hr>" +
"<p><strong>Here are your answers:</strong></p>" +
"<p>" + answer1HTML + "</p>" +
"<p>" + answer2HTML + "</p>" +
"<p>" + answer3HTML + "</p>" +
"<p>" + answer4HTML + "</p>" +
"<p>" + answer5HTML + "</p>";
htmlBody += emailMessage + htmlFooter;
// GmailApp must have default recipient, subject, body attributes followed by jsobject options {}
// Differs from MailApp syntax but has more options -- see documentation on GmailApp
MailApp.sendEmail(to, emailSubject, plainTxtBody, {
htmlBody: htmlBody,
});
}
}
答案 0 :(得分:0)
脚本确实起作用。 Var“至”可能不包含有效的电子邮件地址。确保已在电子表格中选择了有效范围。另请注意,数组中的第一项索引为0。这反映到所选内容的第一列。 您可以设置一个断点并使用调试器或使用Logger.log(to);查看->日志将显示var to的结果。