根据Google表格中的数据使用Apps脚本模板化电子邮件

时间:2016-01-21 14:08:20

标签: google-apps-script google-sheets gmail

我是脚本新手,所以我希望有人可以帮我创建一个。

我正在尝试为可以在按下自定义菜单时发送电子邮件的工作表创建脚本。

这是一个要处理的文件。 https://docs.google.com/spreadsheets/d/1Ea-3eZoclHrAkZLwRmWWFbmbnn4dESNWvK_6pn1DCbE/edit?usp=sharing

此外,它只应在列(例如第I列)具有特定值时发送,例如'已批准'

电子邮件内容应如下所示:

  

主题:离开申请#' ColumnC'

     

嗨' ColumnA',

     

我们收到了您的' ColumnB'请求' ColumnE'

     

状态:' ColumnG'

     

更多详情:' ColumnH'

     

-admin

电子邮件应发送至E列和F列。

该脚本还必须更新电子表格以避免重复的电子邮件。

1 个答案:

答案 0 :(得分:1)

以下是working example

以下是代码:

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var startRow = 2;  // First row of data to process
  var lastRow = sheet.getSheetByName('Journal').getLastRow();  // Last row with content

  var rangeEmailSent     = sheet.getRangeByName('Journal!EmailSent');
  var dataEmailSent      = rangeEmailSent.getValues();
  var dataRequestedBy    = sheet.getRangeByName('Journal!RequestedBy').getValues();
  var dataRequestType    = sheet.getRangeByName('Journal!RequestType').getValues();
  var dataRefNo          = sheet.getRangeByName('Journal!RefNo')      .getValues();
  var dataStatus         = sheet.getRangeByName('Journal!Status')     .getValues();
  var dataToEmail        = sheet.getRangeByName('Journal!ToEmail')    .getValues();
  var dataSupComment     = sheet.getRangeByName('Journal!SupervisorComment').getValues();

  var subjectTemplate = sheet.getRangeByName('SubjectTemplate1').getValue();
  var bodyTemplate =  sheet.getRangeByName('BodyTemplate1').getValue();
  var msgSubject;
  var msgBody;

  for (var i = (startRow-1); i <= (lastRow-1); i++) {

    // send e-mail if "Email Sent" is not blank and if "Status" is not empty
    if ( !(dataEmailSent[i]=='Yes') && !(dataStatus[i] =='')) {

      msgSubject = subjectTemplate.replace('$REF$', dataRefNo[i]);

      msgBody = bodyTemplate
        .replace('$REQUESTED_BY$', dataRequestedBy[i])
        .replace('$REQUEST_TYPE$', dataRequestType[i])
        .replace('$EMAIL$', dataToEmail[i])
        .replace('$STATUS$', dataStatus[i])
        .replace('$SupervisorComment$', dataSupComment[i]);
      // Logger.log(msgSubject);
      // Logger.log(msgBody);

      MailApp.sendEmail(dataToEmail[i], msgSubject, msgBody);
      // Change "Email sent" to "Yes"
      rangeEmailSent.getCell(i+1,1).setValue('Yes'); // note: getCell(1,1) refers to the 1st cell
    } 
  } 
}