0

わかりましたので、次のスクリプトを使用します: https://developers.google.com/apps-script/articles/mail_merge

そして、シートが更新されたときにトリガーするようにトリガーを設定しました。それはしますが、スプレッドシート内のすべての古い電子メールにも電子メールを送信します。たとえば、フォームに入力してメール アドレスに user1 を入力すると、user1 にのみメールが送信されます。フォームにもう一度入力すると、user2 に入力すると、user1 と user2 の両方が電子メールを受け取ります。user2 だけが電子メールを受け取るようにします。

3 回目にフォームに入力する場合は、user3 にのみメールを送信したいと思います。

私の機能は次のようになります。

 function sendEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows() - 1, 4);

  var templateSheet = ss.getSheets()[1];
  var emailTemplate = templateSheet.getRange("A1").getValue();

私はこれを試します:

  function sendEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var lastRow = dataSheet.getMaxRows() - 1;
  var dataRange = dataSheet.getRange(lastRow, 1, lastRow, 4);

  var templateSheet = ss.getSheets()[1];
  var emailTemplate = templateSheet.getRange("A1").getValue();

何も送信しません。何か間違ったことをしていますか =) ?

4

1 に答える 1

0

その答えは、フォーム内のエントリのリスト全体をたどり、各エントリにメールを送信する SendEmails メソッドにあると思います。フォームに情報を最後に入力した人にのみ電子メールを送信するには、その機能を変更する必要があります。

いくつかのオプションがあり、次のように入力範囲を最後の行のみに変更できます。

var lastRow = dataSheet.getLastRow();
var dataRange = dataSheet.getRange(lastRow, 1, lastRow, 4);

これは問題なく動作するはずです。2 番目にループを削除できます。ループは 1 回だけ実行されるようになりましたが、シートのメニューを使用して後でリスト全体にメールを送信する場合に備えて、今はそのままにしておくことをお勧めします。

関数 SendMails(onlyLast) にブール値パラメーターを含めることができることを拡張すると、切り替えを行うことができます。このようにして、両方の長所を活用できます。

function sendEmails(onlyLast) {
...
var startRow = 2;
var endRow = dataSheet.getLastRow() - 1;
if (onlyLast)
  startRow = endRow;
var dataRange = dataSheet.getRange(startRow, 1, endRow, 4);

それがどのように機能するか教えてください。

于 2013-09-19T02:06:32.793 に答える