google-apps-script - 从 Google 表格通过电子邮件发送最后一行 - 添加数据时自动查找新的最后一行

标签 google-apps-script google-sheets gmail

我有一个电子表格,其中 K 列中有电子邮件地址,A 到 D 列中有数据。我正在尝试编写一个脚本,用于向 K 列中的所有电子邮件地址发送电子邮件。主题应该是 Col 中的最后一行C 和电子邮件正文应位于 D 列的最后一行

以下是我所拥有的,但我有两个问题。每当我需要将电子邮件地址添加到列表中时,我都需要调整脚本 var dataRange = sheet.getRange("K4:K9");在 K10 中包含新的电子邮件地址。有一个更好的方法吗?

我还尝试使用 getLastRow 作为电子邮件主题和正文,它有效,但它只是获取数据范围中的最后一行。我必须更新var dataRange2= sheet.getRange("A4:D6");每天都会添加一条新线路。我尝试使 dataRange 更大,但随后它捕获空白行作为最后一行。我再次不确定如何使其自动化。

   /**
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 3; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the Email range of cells K4:K6
    var dataRange = sheet.getRange("K4:K9");
    var emailAddress = dataRange.getValues() // Email Col
    var dataRange2= sheet.getRange("A4:D6");
    var message = SpreadsheetApp.getActiveSheet().getRange("D" + dataRange2.getLastRow()).getValues(); // Fact Col
    var subject = SpreadsheetApp.getActiveSheet().getRange("C" + dataRange2.getLastRow()).getValues(); // Question Col 
    MailApp.sendEmail(emailAddress, subject, message);
}

最佳答案

使用“for”循环循环遍历每一行数据。如果您想为具有电子邮件地址的每一行发送电子邮件。

运行代码,然后查看日志。在代码编辑器中,单击“查看”菜单,然后单击“日志”。

出于测试目的,您可能需要注释掉发送电子邮件的语句、运行代码并查看日志。

function sendEmails2() {
  var data,dataRange,emailAddress,i,L,lastRow,message,sheet,startRow,subject,thisRow;

  sheet = SpreadsheetApp.getActiveSheet();
  lastRow = sheet.getLastRow();

  startRow = 3; // First row of data to process

  dataRange = sheet.getRange(startRow, 1, lastRow - startRow, 11);//Start in column 1 and get 11 columns of data
  data = dataRange.getValues();//Get a 2D array of data

  L = data.length;//The number of inner arrays in the 2D array - which is
                 //the number of rows in the range
  for (i=0;i<L;i++) {
    thisRow = data[i];//Get one inner array of data which represents one row

    subject = thisRow[2];//The subject is in column 3 which is index 2
    message = thisRow[3];//The message is in column 4 which is index 3

    emailAddress = thisRow[10];

    Logger.log("subject: " + subject)
    Logger.log("message: " + message)
    Logger.log("subject: " + subject)

    if (!emailAddress) {
      continue;
    }

    MailApp.sendEmail(emailAddress, subject, message);
  }

}

关于google-apps-script - 从 Google 表格通过电子邮件发送最后一行 - 添加数据时自动查找新的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597514/

相关文章:

validation - 使用 Google Apps 脚本创建下拉菜单。更改颜色的方法是否缺失或不可用?

google-apps-script - 带边距的 Google Apps 脚本打印表

timezone - GMail 对于内部 IMAP 邮件存储使用什么时区?

c# - 在 gmail 上使用 smtp 发送电子邮件

javascript - 如何让 Google 表格绑定(bind) code.js 从未包含的远程 .js 文件读取 JavaScript 并对其执行操作?

python - Sendgrid 外发电子邮件将显示在我的已发送邮箱中

javascript - Google Apps 脚本 - 基于 for 循环匹配的单元格中的 .setValue

google-apps-script - 通过 Google 应用脚本在日历上创建带有附件的事件

google-apps-script - 使用 Google Apps 脚本将 HTML 注入(inject) Google Docs

google-apps-script - 使用应用程序脚本在电子表格菜单中带有 addItem 参数的函数