【问题标题】:Send email from cell value google sheet, with other columns in email从单元格值谷歌表发送电子邮件,电子邮件中的其他列
【发布时间】:2017-05-31 22:33:03
【问题描述】:

抱歉,我知道这已经被问了几次,我从其他问题中学到了这一点,但是我仍然卡住了,不知道如何继续。

我正在尝试制作一个 google 脚本,以根据单元格更改向多个人发送电子邮件通知,同时在同一行中发送电子邮件中的多个单元格值?

例如如果“C”列发生更改,我可以发送一封电子邮件,其中包含“C”列更改的同一行中“A”和“B”列的数据吗?

这是我一直在尝试使用的脚本,但不知道如何添加多封电子邮件,以及来自另外两个单元格的值。

function sendNotifications() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell().getA1Notation();
var row = sheet.getActiveRange().getRow();
var cellvalue = ss.getActiveCell().getValue().toString();
var recipients = email@domain.com";
var message = '';
var cellA = ''
if(cell.indexOf('B')!=-1){ 
message = sheet.getRange('A'+ sheet.getActiveCell().getRowIndex()).getValue()
}
var subject = 'Update to '+sheet.getName();
var body = + cellvalue + '». For message: «' + message + '»';
MailApp.sendEmail(recipients, subject, body);
};

【问题讨论】:

  • 您可以通过, 分隔地址来发送给多个收件人。可以通过getRange() 从另一个单元格获取数据

标签: excel email google-apps-script google-sheets


【解决方案1】:

下面的代码检查编辑的单元格是否在 C 列中,如果满足条件,则从编辑的行中获取 A 列和 B 列的值。在 Google Apps 脚本中,onEdit() 是内置函数,当您在电子表格中进行更改时会自动触发。 'e' 参数表示事件对象,您可以检查该对象以获取有关事件发生的上下文的更多详细信息

function onEdit(e){

  var editRange = e.range; // e is the event object generated by the Edit event
  var editRow = editRange.getRow();   // get row and column for the edited cell
  var editCol = editRange.getColumn();


  var sheet = SpreadsheetApp.getActiveSpreadsheet()
                            .getSheetByName("Sheet1"); // put your sheet name between the brackets

  if (editCol == 3) {   // checking if the edited cell was in column C

      var range = sheet.getRange(editRow, 1, 1, editCol - 1); // Take 1st cell in the edited row and make it span 1 row and 2 columns
      var values = range.getValues(); // get values array for the range
      Logger.log(values);

  }

}

生成的变量 ('values') 是一个数组,因此您必须遍历它以获取字符串值。至于电子邮件,您可以将多封电子邮件存储在一个单元格中,以逗号分隔。对字符串调用 split() 方法将为您获取一个值数组(电子邮件),然后您可以将其作为第一个参数传递给 sendEmail 方法。

  var cellValue = "email@example.com,anotheremail@example.com,yetanotheremail@example.com";
  var recipients = cellValue.split(",");  
  MailApp.sendEmail(recipients, "From google-apps-script", "hello from google apps script")

【讨论】:

  • 感谢 Anton 的回复,该脚本似乎会在任何已编辑的单元格上向我发送一封电子邮件,无论其 C 列是否存在?另外,如何在发送的电子邮件正文中获取 C 列(例如 A 和 B)旁边的列?比如“你好列(a值),(b值)已经更新了!”
  • 请花一些时间阅读 Google Apps 脚本文档并了解 JavaScript 的基础知识。否则,看起来您希望有人为您完成所有编码,这不是 StackOverflow 的用途。 sendEmail() 方法中的最后一个参数是电子邮件的正文,您可以通过连接来自单元格值的字符串来形成它。您还可以将这些代码段捆绑在一起,仅当编辑的值在第 3 列 (C) 中时才发送电子邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
相关资源
最近更新 更多