繁体   English   中英

如何使用javascript对来自Google工作表的电子邮件进行分组

[英]How to group emails from google sheets with javascript

情况:这是一个大约40人的小型办公室的休假(或休假)批准/监控系统。 他们通过谷歌表格提出请假,这些表格最终被送入谷歌表格。 每月一次,我们需要向每个请假的人发送一封电子邮件,其中包含他们为该月制作的每个条目。 我更改了谷歌的标准JavaScript,它会从电子表格发送电子邮件,但每行发送一封电子邮件。 我需要向每个人发送一份综合电子邮件。 在运行脚本之前,电子表格将只包含具有适用日期的记录,并将按[电子邮件]和[开始日期]列进行排序,因此无需在此脚本中执行任何此类工作。

以下是按顺序排列的所有列:时间戳,电子邮件,请求的请假类型,开始日期,上次日期,小时数,可选注释,批准决定,可选说明。

我已经尝试过创建一个2D阵列,但我以前在这样一个阵列上的尝试只能在几秒钟内使用我的100 /天谷歌交易。 :/帮助表示赞赏。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var menu = [{
    name: "Send Email",
    functionName: "uiSendEmail"
  }];

  ss.addMenu("Send Email Test", menu);
}

function uiSendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getDataRange();

  range= range.offset(1, 0, range.getNumRows()-1);
  range.getValues().forEach( function( cell, key, data ){


    var body = "Type of Leave - " + cell[2] + "\n\nStarting - " + cell[3] + "\n\nEnding - " + cell[4] + "\n\nHours - " + cell[5] + "\n\nNote Provided - " + cell[6] + "\n\n\n";
    //   "Type of Leave " + cell[2] \n\n;+ "Starting " + cell[3] \n\n + "Ending " + cell[4] \n\n + "Hours " + cell[5] \n\n + "Note provided " + cell[6] 
    GmailApp.sendEmail(cell[1], "Recent Requests for Time Off", body);
    });
  }

您可以创建一个对象,遍历这些值并将它们添加到相应的电子邮件中。

function uiSendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getDataRange();
var emails = {};

range= range.offset(1, 0, range.getNumRows()-1);
range.getValues().forEach( function( cell, key, data ){

    var body = "Type of Leave - " + cell[2] + "\n\nStarting - " + cell[3] + "\n\nEnding - " + cell[4] + "\n\nHours - " + cell[5] + "\n\nNote Provided - " + cell[6] + "\n\n\n";

    if(typeof emails[cell[1]] === 'undefined'){ 
      emails[cell[1]] = body;
    } else {
      emails[cell[1]] += body;
    }
   });

//Now loop through the email object and send each completed one
for(var address in emails) {
   GmailApp.sendEmail(address, "Recent Requests for Time Off", emails[address]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM