2

スタック オーバーフローの皆さん、こんにちは。

スプレッドシートから見積もりを取得し、電子メールでユーザーに送信する小さなスクリプトを作成しました。アイデアは、スクリプトが 1 日に 1 回実行され、スプレッドシートの次の見積もりを引き出し、それを電子メール アドレスに送信するというものです。

スクリプトは次のようになります。

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1000;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows, 3);
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    if(row[2]=="yes") { 
      continue;
    }
    var emailAddress = "myemail@email.com";     // email to send to 
    var message = '"'+row[0]+'"'+"\n\n"+"- "+row[1];       // Second column
    startRow = parseInt(startRow)+parseInt(i);
    var subject = "";
    MailApp.sendEmail(emailAddress, subject, message);  
    sheet.getRange(startRow,4).setValue("yes");
    SpreadsheetApp.flush();
    break;
  }
}

手動で実行すると、スクリプトは正常に動作します。

次に、次のようなスクリプト トリガーを追加しました。

sendEmail | タイムドリブン | デイタイマー | 午後7時から午後8時

残念ながら、関数は実行されておらず、見積もりは送信されていません。

また、Time-Driven トリガーを理解するのに少し問題があります。「午後7時から午後8時」とはどういう意味ですか? この 2 時間の間にランダムな時間に 1 回ですか?

このスクリプトは、Google ドキュメントにログインする必要がない場合にのみ意味があります。多分私はここで何かを完全に誤解しています... Google ドキュメントにログインしている場合にのみスクリプトが機能しますか? (しかし、私がそうであったとしても、今のところ、スクリプトはタイムドリブン トリガーでは実行されません)。

これについてのあなたの考えにとても感謝しています。モリッツ

4

2 に答える 2

2

タイマー/イベントからスクリプトを実行する場合、「ActiveSpreadsheet」はありません。.getActiveSpreadsheet()を使用する代わりに、.openById()を使用します

スクリプトトリガーを正常に実行するために、Googleドキュメントに登録されている必要はありません(または認証されている必要はありません)。

また、スクリプトの失敗に対して即時通知を使用すると(特にデバッグ時に)役立ちます。タイマーを設定する場所で、通知リンクをクリックして設定します。

于 2012-05-11T17:45:16.203 に答える
0

mzimmerman からの回答に加えて

また、Time-Driven トリガーを理解するのに少し問題があります。「午後7時から午後8時」とはどういう意味ですか? つまり、スクリプトは午後 7 時から午後 8 時までの間に実行されますが、私の観察によると、午後 7 時以降に実行されます。

于 2012-05-11T18:51:05.257 に答える