仅当行不为空时才向特定电子邮件地址发送电子邮件

Send emails to a specific email address only when row is not empty

我有一个代码可以根据我的 Google Sheet 选项卡中的值将电子邮件发送到特定的电子邮件地址(在这种情况下可以说是它的 myemailaddress@gmail.com)命名为 'Send Emails [Team A]'。当我单击菜单项 'To Team A' 时 运行s。该代码可以很好地发送电子邮件,但是它也在空白行上发送 运行s,因此将空白电子邮件发送到 myemailaddress@gmail.com。 sheet 会不时更新,这就是为什么我直到特定行才限制范围。有没有办法让代码 运行 只出现在非空白的行上?

这是我正在使用的代码:

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("Send Emails")
      .addItem("To Team A", "toTeamA")
      .addToUi();

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "Email Sent";

function toTeamA() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Send Emails [Team A]");
  var startRow = 2; // First row of data to process would be '2' because the first row is header
  var numRows = 1000; // Number of rows to process
  var dataRange = sheet.getRange('A2:D') // Gets the data range
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = "myemailaddress@gmail.com";
    var subject = row [1];      // Second column
    var message = row [0];      // First column
    var emailSent = row [2];    // Third column
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Makes sure cell is updated right away with "Email Sent" in case the script is interrupted
      SpreadsheetApp.flush();  
    }
  }
}

非常感谢任何帮助!

当然,假设您的行是空的,例如第 1-100 行包含内容,而第 101 行之后是空的。您可以使用 sheet.getLastRow() 找到包含数据的最后一行,请参阅 docs

因此,您可以执行 sheet.getRange("A2:D"+sheet.getLastRow()) 而不是执行 sheet.getRange("A2:D"),这应该可以解决问题。