Google Sheets脚本新增行自动发邮件问题:单行列内容重复叠加
问题解决:让每封邮件仅包含单行数据
你的问题和StartRow/LastRow无关,核心问题是邮件内容变量message在循环外定义并累加:每次处理符合条件的行时,你用message +=把当前行内容追加到变量里,而不是重新生成新内容,导致后续邮件会带上之前所有行的信息。
修改方案
把message的初始化移到if条件内部,每次处理单行时重新生成独立的邮件内容,具体改动后的完整脚本如下:
function email() { //setup function var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("First Time Users"); var StartRow = 2; //first row of data to process var LastRow = ActiveSheet.getLastRow(); var RowRange = LastRow - StartRow + 1; var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,9); var AllValues = WholeRange.getValues(); for (var i=0;i<AllValues.length;i++) { var CurrentRow = AllValues[i]; var EmailSent = CurrentRow[8]; if (CurrentRow[7] == "Y" && EmailSent!= "Y") { // 每次处理单行时重新初始化内容变量 var message = ""; // 直接赋值当前行的内容,不再累加 message = "<p><b>Request: </b>" + CurrentRow[0] + "</p>" + "<p><b>Account: </b>" + CurrentRow[1] + "</p>" + "<p><b>Appointment Created Date: </b>" + CurrentRow[4] + "</p>" + "<p><b>User: </b>" + CurrentRow[5] + "</p>"; var setRow = i + StartRow; var SendTo = "testemail@gmail.com"; var Subject = "First Time User Submitted Ask: " + CurrentRow[1]; //set subject line //send the actual email MailApp.sendEmail ({ to: SendTo, cc: "", subject: Subject, htmlBody: message, }); ActiveSheet.getRange(setRow, 9).setValue("Y"); //update the row if email is sent } } }
关键改动说明
- 将
var message = ""从循环外部移到if条件内部,确保每次处理符合条件的行时,都会初始化一个全新的空内容变量。 - 把
message +=改成message =,不再累加之前的内容,只填充当前行的信息。
这样修改后,每封邮件就只会包含对应单行的Request、Account、Appointment Created Date和User信息,不会再出现内容叠加的问题。
内容的提问来源于stack exchange,提问作者allison
相关产品推荐
相关产品推荐

