2017-06-09 45 views
1

我想修改我的代碼,我可以發送一個基於指定行的值的電子郵件的方式。通過谷歌工作表發送電子郵件行完全完成

問題:幾個人在進行銷售時同時使用此工作表,並且腳本要求發送包含不包含email_sent的「if」值的一組行的電子郵件。我想插入一行或者只發送滿足所有條件的行的電子郵件。我也想保護髮送後的細胞,以免它們被錯誤地編輯或刪除。最後,我希望沒有谷歌賬戶的用戶能夠觸發腳本。

`// This constant is written in column L for rows for which an email 
`// has been sent successfully.` 
`var EMAIL_SENT = "EMAIL_SENT";` 

`function sendEmails2() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 1; // Number of rows to process 
    // Fetch the range of cells A2:K2 
    var dataRange = sheet.getRange(2,1,3,12) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[0]; // First column 
    var message = Utilities.formatDate(row[1], "GMT" , "MM/dd/yyyy"); 
    var message1 = row[2]; // third column 
    var message2 = row[3]; 
    var message3 = row[4]; 
    var message4 = row[5]; 
    var message5 = row[6]; 
    var message6 = row[7]; 
    var message7 = row[8]; 
    var message8 = row[9]; 
    var message9 = Utilities.formatDate(row[10], "GMT" , "MM/dd/yyyy"); 
    var emailSent = row[12]; // 12th column 
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 
     var subject = "Sending emails from a Spreadsheet"; 
     MailApp.sendEmail(emailAddress, subject, "\nSale date: " + message + "\nCustomer: " + message1 + "\nJob: " + message2 + "\nLender: " + message3 + "\nAged inventory: " + message4 + "\nreplacing CAN: " + message5 + "\nChange option: " + message6 + "\nSource: " + message7 + "\nRealtor: " + message8 + "\nClosing: " + message9); 
     sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT); 
     // Make sure the cell is updated right away in case the script is interrupted 
     SpreadsheetApp.flush(); 
    } 
    } 
}` 
+0

任何幫助將不勝感激! –

回答

0

這是可能做到這一點在使用國際單項體育聯合會和& &一條線,但它是笨重且耗時維護。

而是添加一個新函數來測試該行。

添加這三種新的生產線在你for循環:

var bool; 
for (var i = 0; i < data.length; ++i) { 
    bool = testData(data[i]) 
    if(bool){ 

而且還添加了一個支具功能的高端路線。

將下面的函數添加到腳本文件中。

function testData(data) { 
    var bool = true; 
    for (var x = 0; x < data.length; x++) { 
     if (!data[x]) { 
      bool = false; 
      break; 
     } 
    } 
    return bool; 
} 

它通過將行傳遞給測試函數來工作。如果任何單元格爲空白,它將返回一個假,然後function sendEmails2()將跳過該行並移動到下一行。

UPDATE完整的工作代碼

// This constant is written in column C for rows for which an email 
    // has been sent successfully. 
    var EMAIL_SENT = "EMAIL_SENT"; 

    function sendEmails2() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 2; // Number of rows to process 
    // Fetch the range of cells A2:K2 
    var dataRange = sheet.getRange(2,1,3,12) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 

    for (var i = 0; i < data.length; ++i) { 
    if(testData(data[i])){ // Pass the row of data to the testData function (testData will return true or false) 
     var row = data[i]; 
     var emailAddress = row[0]; // First column 
     var message = Utilities.formatDate(row[1], "GMT" , "MM/dd/yyyy"); 
     var message1 = row[2]; // third column 
     var message2 = row[3]; 
     var message3 = row[4]; 
     var message4 = row[5]; 
     var message5 = row[6]; 
     var message6 = row[7]; 
     var message7 = row[8]; 
     var message8 = row[9]; 
     var message9 = Utilities.formatDate(row[10], "GMT" , "MM/dd/yyyy"); 
     var emailSent = row[11]; // 12th column 
     if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 
     var subject = "Sending emails from a Spreadsheet"; 
     MailApp.sendEmail(emailAddress, subject, "\nSale date: " + message + "\nCustomer: " + message1 + "\nJob: " + message2 + "\nLender: " + message3 + "\nAged inventory: " + message4 + "\nreplacing CAN: " + message5 + "\nChange option: " + message6 + "\nSource: " + message7 + "\nRealtor: " + message8 + "\nClosing: " + message9); 
     sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT); 
     // Make sure the cell is updated right away in case the script is interrupted 
     SpreadsheetApp.flush(); 
     } 
    } 
    } 
    } 


    function testData(data) { // Function to test the data 
     for (var x = 0; x < data.length - 1; x++) { // Loop through each cell (length -1 because we don't want to check the email sent cell as that should be empty) 
      if (!data[x]) { // If a cell is empty return false 
       return false; 
      } 
     } 
     return true; // If no empty cells are found return true 
    } 
+0

它會在哪裏添加這些行嗎? –

+0

我收到一個錯誤,指出testData不是一個函數,它是未定義的 –

+0

你能否提供樣本表? –

相關問題