如何使用javascript将Google电子表格中的电子邮件分组为

问题描述:

情况:这是一个为40人左右的小型办公室提供的离职(或休假)审批/监控系统。他们通过Google表单提交请求(最终)到Google表单中。每个月一次,我们需要发送一封电子邮件给每一个带走假期的人,其中包含他们为这个月所做的每个条目。我已经改变了标准的JavaScript从谷歌将发送电子邮件从电子表格,但它每行发送一封电子邮件。我需要向每个人发送一个综合电子邮件。在运行脚本之前,电子表格将只包含具有适用日期的记录,并将按[电子邮件]和[开始日期]列进行排序,因此不需要在此脚本中执行任何工作。如何使用javascript将Google电子表格中的电子邮件分组为

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

我试过创建一个二维数组,但我以前的尝试在这样一个数组只有结果在几秒钟内使用我的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); 
    }); 
    } 
+0

从我免费给予好评.. – toha

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

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]); 
} 
+0

最大G., 完美!做得好。解决长期问题的简单方法。 非常感谢, usmids – usmids

+0

我的荣幸! :) –