2017-01-24 74 views
1

我拼湊起來,並修改了以下腳本,電子郵件谷歌的表的內容相同的片內所列的電子郵件地址表名稱列表循環。它運行良好,但僅限於我按名稱列出的表單。谷歌表腳本通過位於細胞

似乎我不能制定出循環是它使得紙張的域名(目前硬編碼爲「NYC」)從位於電子表格中的工作表名稱列表拉。我想它運行腳本引用A1中列出的表名稱,那麼如果A2如果一個上市,那麼A3如果一個上市等等等等

這可能嗎?

function sendEmail() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
// var sheet = ss.getActiveSheet(); 
 
    var sheet = ss.getSheetByName('NYC'); 
 
    var range = sheet.getDataRange(); 
 
    var recipient = sheet.getRange("A2").getValue(); // "TO" email address 
 
    var subject = "Inbound Shipments Scheduled for Delivery On " + Utilities.formatDate(
 
        sheet.getRange("B2").getValue(), 
 
        ss.getSpreadsheetTimeZone(), 
 
        "MM/dd/yy"); 
 
    var schedRange = sheet.getRange("A3:Q102"); 
 
    // var schedRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()) 
 

 

 
    // Put Name & Date into email first. 
 
    // We only want the schedule within borders, so 
 
    // these are handled separately. 
 
    var body = '<div style="text-align:center;display: inline-block;font-family: arial,sans,sans-serif">' 
 
    body += '<H1>'+ 'Shipments Due ' +'</H1>'; 
 
    body += '<H2>' 
 
     + Utilities.formatDate(
 
      sheet.getRange("B2").getValue(), 
 
      ss.getSpreadsheetTimeZone(), 
 
      "EEEEE, MMMMM d, yyyy") 
 
     + '</H2>'; 
 
    body += getHtmlTable(schedRange); 
 
    body += '</div>'; 
 
    debugger; 
 

 
    // recipient = '*********@gmail.com'; // For debugging, send only to self 
 
    MailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body}) 
 
}

回答

0

看看代碼從getRowsData的定義()向下Tutorial: Simple Mail MergË教程於樣品中。這將允許您閱讀一次表格的內容,這將加快您的代碼。然後,您可以遍歷數據並使用列標題來檢查值。您的代碼將改變了不少,喜歡的東西:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    function sendAllEmails() { 
     var sheet = ss.getSheetByName("PrimaryDataSHEETname"); 
     var sheetRange = sheet.getRange("A1:Z") 
     var myRows = getRowData(sheet, sheetRange); 

     for (var i=0; i < myRows.length; ++i){ 
     if(typeof(myRows[i].Sheet1) !== 'undefined'){ 
      sendIndividualEmail(myRows[i].Sheet1); 
     } 

     if(typeof(myRows[i].Sheet2) !== 'undefined'){ 
      sendIndividualEmail(myRows[i].Sheet2); 
     } 
    } 

    function sendIndividualEmail(sheetName) { 
     var sheet = ss.getSheetByName(sheetName); 
     //Grab necessary data from tehis sheet and send emails 

    } 

你可以從第一片傳遞更多信息的函數用於創建電子郵件,如收件人,主題等

+0

謝謝。我不認爲我理解這是如何工作的。在上面的原始代碼中,還有一些額外的功能,它會抓取表格併發送給他們很好的郵件,但是我無法通過一系列在電子表格中的列中命名的表單進行循環,但是在另一個表單上。那可能嗎? –

+0

爲了更好地回答這個問題,我需要查看你的工作表。它可以是樣本數據的副本。基本上我的第一個函數會讀取圖表名稱的列,循環遍歷它,併爲每個函數運行第二個函數。我使用鏈接教程中的retRowData()函數,僅在第一個函數中調用一次google服務器,在第二個函數的每次迭代中調用一次。然後我循環保存在內存中的數據,而不是多次調用該文件。這會使事情加速很多。每次使用.getValue()時,都會向服務器發出呼叫。 –

+0

我做了一個副本。 https://docs.google.com/spreadsheets/d/1ebLcPO9GaxI2kl5Yi_pkafB4Iyu5FH9ZafANLUuxY-Q/edit?usp=sharing –

相關問題