2017-08-12 20 views
0

[Send single email with values from all new rows in a spreadsheet (Google Script/GAS)]を編集しています。この関数はSheetを更新するまで機能しますが、送信される電子メールはすべての行の情報を送信します。まだemail_fwdというラベルが付いていない行からのみ電子メールを送信したいと思います。Googleで新しい行のみを電子メールで送信

function sendEmail() { 

//setup function 
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var StartRow = 1; 
var RowRange = ActiveSheet.getLastRow() - StartRow + 1; 
var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,17); 
var AllValues = WholeRange.getValues(); 

var message = ""; 
//iterate loop 
for (i in AllValues) { 

//set current row 
var CurrentRow = AllValues[i]; 

//define column to check if sent 
var EmailSent = CurrentRow[17]; 

//if row has been sent, then continue to next iteration 
if (EmailSent == "email_fwd") 
    continue; 

//set HTML template for information 
    message += 
     "<p><b>E-mail: </b>" + CurrentRow[1] + "</p>" + 
     "<p><b>Days: </b>" + CurrentRow[2] + "</p>" + 
     "<p><b>First Name: </b>" + CurrentRow[3] + "</p>" + 
     "<p><b>Last Name: </b>" + CurrentRow[4] + "</p>" + 
     "<p><b>Address: </b>" + CurrentRow[5] + "</p>" + 
     "<p><b>City: </b>" + CurrentRow[6] + "</p>" + 
     "<p><b>State: </b>" + CurrentRow[7] + "</p>" + 
     "<p><b>Phone: </b>" + CurrentRow[8] + "</p>" + 
     "<p><b>Country: </b>" + CurrentRow[9] + "</p>" + 
     "<p><b>Phone: </b>" + CurrentRow[10] + "</p>" + 
     "<p><b>Place: </b>" + CurrentRow[11] + "</p>" + 
     "<p><b>Rank: </b>" + CurrentRow[12] + "</p>" + 
     "<p><b>Emergency Contact: </b>" + CurrentRow[13] + "</p>" + 
     "<p><b>Emergency Contact Phone: </b>" + CurrentRow[14] + "</p>" + 
     "<p><b>Questions & Comments: </b>" + CurrentRow[15] + "</p><br><br>"; 

    //set the row to look at 
    var setRow = parseInt(i) + StartRow; 

    //mark row as "sent" 
    ActiveSheet.getRange(setRow, 17).setValue("email_fwd"); 
} 

//define who to send grants to 
var SendTo = "[email protected]"; // + "," + "[email protected]"; 

//set subject line 
    var Subject = "RE: Registrations"; 


    //send the actual email 
    MailApp.sendEmail({ 
     to: SendTo, 
     cc: "", 
     subject: Subject, 
     htmlBody: message, 
}); 
} 

は、私はちょうどStartRow = FIRST ROW THAT IS NOT FOUND WITH email_fwdをリセットする必要があると思うが、私はそれを行うするかどうかはわかりません。リトルヘルプ。

答えて

0

他に問題がなければ、これを行う必要があります。

function sendEmail() 
{ 
    var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var StartRow = 2; 
    var RowRange = ActiveSheet.getLastRow() - StartRow + 1; 
    var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,17);//17 is length of WholeRange so max index is 16 
    var AllValues = WholeRange.getValues(); 
    var message = ""; 
    for (var i=0;i<AllValues.length;i++) 
    { 
    var CurrentRow = AllValues[i]; 
    var EmailSent = CurrentRow[16]; 
    if (EmailSent!="email_fwd") 
    { 
     message += 
      "<p><b>E-mail: </b>" + CurrentRow[1] + "</p>" + 
      "<p><b>Days: </b>" + CurrentRow[2] + "</p>" + 
      "<p><b>First Name: </b>" + CurrentRow[3] + "</p>" + 
      "<p><b>Last Name: </b>" + CurrentRow[4] + "</p>" + 
      "<p><b>Address: </b>" + CurrentRow[5] + "</p>" + 
      "<p><b>City: </b>" + CurrentRow[6] + "</p>" + 
      "<p><b>State: </b>" + CurrentRow[7] + "</p>" + 
      "<p><b>Phone: </b>" + CurrentRow[8] + "</p>" + 
      "<p><b>Country: </b>" + CurrentRow[9] + "</p>" + 
      "<p><b>Phone: </b>" + CurrentRow[10] + "</p>" + 
      "<p><b>Place: </b>" + CurrentRow[11] + "</p>" + 
      "<p><b>Rank: </b>" + CurrentRow[12] + "</p>" + 
      "<p><b>Emergency Contact: </b>" + CurrentRow[13] + "</p>" + 
      "<p><b>Emergency Contact Phone: </b>" + CurrentRow[14] + "</p>" + 
      "<p><b>Questions & Comments: </b>" + CurrentRow[15] + "</p><br><br>"; 
     var setRow = i + StartRow; 
     ActiveSheet.getRange(setRow, 17).setValue("email_fwd"); 
     var SendTo = "[email protected]"; 
     var Subject = "RE: Registrations"; 
     MailApp.sendEmail({to: SendTo,cc: "",subject: Subject,htmlBody: message,}); 

    } 
    } 
} 

私の推測では、あなたのヘッダーは次のように見えることである:それは彼らがすべての1削減する必要があることも可能ですので、2行目の数字は、あなたのインデックスである必要があり

enter image description here

。おそらくあなたは私たちとあなたのスプレッドシートを共有することができます。

+0

これは、1つのメールを送信するのではなく、複数のメールを送信するのではなく、ずっと悪くなります。私は3行を持っている場合、3行すべてのデータを含む電子メールを送信し、最初の2行からの別の電子メールなどを送信します。 – testing123

+0

おっと!間違った場所に括弧がある今は大丈夫でしょう。 – Cooper

+0

@Wonilは正しいです。私はこれをデータの数値でチェックし、 'CurrentRow [17]'はあなたのデータセットには存在しません。 – Cooper

0

あなたは、行のためのJavaScript配列、0

ヒントからインデックス開始にアクセスすると1から

var EmailSent = CurrentRow[17]; 

var EmailSent = CurrentRow[16]; 

にgetRangeのインデックス開始を変更してください。デバッグには Logger.log(CurrentRow[17]);を使用できます。

+0

ありがとうございます。コードのその部分は正常に動作しています。 – testing123

+0

@ testing123あなたの意図を理解できなかった場合は、私の修正版がうまくいきます。テスト版のドキュメントを確認してください - https://docs.google.com/spreadsheets/d/1-kKHmz-nx1WOZni2IkYUS-GOZvo6SriU4k9_-1CAIgQ/edit#gid=0 – Wonil

0

https://developers.google.com/apps-script/articles/sending_emailsの入力ミスでActiveSheetが下から3行目に表示されました。

// This constant is written in column C for rows for which an email 
// has been sent successfully. 

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:B3 
    var dataRange = sheet.getRange(startRow, 1, numRows, 3) 
    // 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 = row[1];  // Second column 
    var emailSent = row[2];  // Third column 
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 
     var subject = "Sending emails from a Spreadsheet"; 

     MailApp.sendEmail(emailAddress, subject, message); 
     **ActiveSheet**.getRange(startRow + i, 3).setValue(EMAIL_SENT); 
     // Make sure the cell is updated right away in case the script is interrupted 
     SpreadsheetApp.flush(); 
    } 
    } 
} 
関連する問題