仅当行不为空时才向特定电子邮件地址发送电子邮件
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")
,这应该可以解决问题。
我有一个代码可以根据我的 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")
,这应该可以解决问题。