Google apps script 在新表单提交条目上发送重复电子邮件

Google apps script 在新表单提交条目上发送重复电子邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有以下脚本,它根据表单提交中的一个字段向适当的人发送电子邮件。它工作正常,但每次提交新条目时都会发送多封电子邮件,我不知道为什么。有人能告诉我我的代码有什么问题吗 function sendEmails() { var sheet = SpreadsheetApp.getActiveSheet(); var startRow = 2; // First row of data to process var numRows = 2; // Number of rows to p

我有以下脚本,它根据表单提交中的一个字段向适当的人发送电子邮件。它工作正常,但每次提交新条目时都会发送多封电子邮件,我不知道为什么。有人能告诉我我的代码有什么问题吗

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var email1 = "A@A.com";
  var email2 = "B@B.com";
  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var subject = "Sending emails from a Spreadsheet";
  if (message = "cat") {
    MailApp.sendEmail(email1, subject, message);
  if (message = "dog") {
    MailApp.sendEmail(email2, subject, message);
  }
   }
    }
      }
这些线路:

if (message = "cat") {
  MailApp.sendEmail(email1, subject, message);
if (message = "dog") {
  MailApp.sendEmail(email2, subject, message);
}
应该是:

var email;//Create a new variable

if (message == "cat") {
  email = email1;
} else if (message == "dog") {
  email = email2;
}

MailApp.sendEmail(email, subject, message);
这些线路:

if (message = "cat") {
  MailApp.sendEmail(email1, subject, message);
if (message = "dog") {
  MailApp.sendEmail(email2, subject, message);
}
应该是:

var email;//Create a new variable

if (message == "cat") {
  email = email1;
} else if (message == "dog") {
  email = email2;
}

MailApp.sendEmail(email, subject, message);

我非常确定表单提交会在最后一行结束,并且不需要在这些行中进行迭代。这假设您没有在表单提交表中掺杂数组公式之类的内容

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getLastRow();
  var dataRange = sheet.getRange(row, 1, 1, sheet.getLastColumn());
  var data = dataRange.getValues()[0];

  var email1 = "A@A.com";
  var email2 = "B@B.com";

  var emailAddress = data[0];  // First column
  var message = data[1];       // Second column
  var subject = "Sending emails from a Spreadsheet";

  if (message == "cat") {
    MailApp.sendEmail(email1, subject, message);
    };
  if (message == "dog") {
    MailApp.sendEmail(email2, subject, message);
    };
   }

最后一部分可能可以通过Sandy的建议或switch>case进行改进

我很确定表单提交最终会出现在最后一行,并且不需要遍历这些行。这假设您没有在表单提交表中掺杂数组公式之类的内容

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getLastRow();
  var dataRange = sheet.getRange(row, 1, 1, sheet.getLastColumn());
  var data = dataRange.getValues()[0];

  var email1 = "A@A.com";
  var email2 = "B@B.com";

  var emailAddress = data[0];  // First column
  var message = data[1];       // Second column
  var subject = "Sending emails from a Spreadsheet";

  if (message == "cat") {
    MailApp.sendEmail(email1, subject, message);
    };
  if (message == "dog") {
    MailApp.sendEmail(email2, subject, message);
    };
   }

最后一部分可能可以通过Sandy的建议或switch>case来改进

Use==或===来测试if语句中的等价性​. 这两个项目的评估结果都是正确的。@ScampMichael尝试了你的建议,但没有成功,仍然发送了多个。这就好像它不是只检查新行以确定发送电子邮件的位置,而是检查所有行。我不知道如何解决这个问题。email1和email2中有多少?在您编写代码时,您的代码将遍历数据范围中的每一行并相应地发送一封电子邮件。您可能希望在文档中看到表单提交触发器,以查看如何提取最后一个表单dataUse==或===以测试if语句中的等效性​. 这两个项目的评估结果都是正确的。@ScampMichael尝试了你的建议,但没有成功,仍然发送了多个。这就好像它不是只检查新行以确定发送电子邮件的位置,而是检查所有行。我不知道如何解决这个问题。多少email1和多少email2?在您编写代码时,您的代码将遍历数据范围中的每一行并相应地发送一封电子邮件。您可能希望看到文档中的表单提交触发器,以查看您如何提取最后一个表单数据非常感谢@sandygood,我现在能够使用它,这要感谢你的帮助!非常感谢您@sandygood,多亏您的帮助,我现在能够让它工作了!非常感谢你的帮助!现在可以了!我真的很感激。非常感谢你的帮助!现在可以了!我真的很感激。