2016-09-28 99 views
1

情況:這是一個爲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

回答

0

您可以創建一個對象,循環訪問這些值並將它們添加到相應的電子郵件中。

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

我的榮幸! :) –

相關問題