1

ジョブが完了したときに電子メールを送信するスクリプトを作成します。メールを2回送信するのを防ぐと思われる部分を追加しました. 原因が分からず困っています。

function sendEmail() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = sheet.getLastRow();
  var EMAIL_SENT = "EMAIL_SENT";
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)

  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) 

  {
    var row = data[i];
    var emailAddress = row[1];
    var message = "Correction Completed for " + row[2]; 
    var subject = "Correction Completed";
    var emailSent = row[9];

    if (emailSent != "EMAIL_SENT") //prevent sending duplicate messages
    {
    MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);

      SpreadsheetApp.flush();  
    }

  }

}

私の考えでは、sendEmail の部分を if ステートメントに入れていましたが、送信されません。ただし、それでもメールは送信されます。前もって感謝します。

4

2 に答える 2

1

あなたの問題はあなたvar dataRange = sheet.getRange(startRow, 1, numRows, 3)です。のため、3より大きいものに変更してみてください。読むときは、以前の書き込み状況を読むことに注意してください。9var emailSent = row[9];emailSent

于 2013-03-01T10:44:32.613 に答える
0

2つのことを明確にしましょう:

  1. sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);getRangeは1から始まる列番号で機能するため、使用する場合は、実際に9列目にEMAIL-SENTラベルを書き込んでいます。
  2. 配列(シート範囲から取得)のデータを読み取る場合、この配列のインデックスは0から始まります。つまりvar emailSent = row[8];、対応する9番目の値を取得するために使用する必要があります。
  3. (はい、私は2つのことを言ったことを知っています;-)配列には少なくともこの9番目の列が含まれている必要があるため、適切な範囲を使用して読み取る必要があります:var dataRange = sheet.getRange(startRow, 1, numRows, 9)たとえば... (ただし、いずれの場合も9以上)

これが十分に明確であることを願っています。

于 2013-03-01T13:24:34.310 に答える