前回の記事で「毎日決まった時間にスプレッドシート上の今日の日付と一致した行番号の内容(今日の名言)をメールで自動送信したい」と思った場合にGAS(GoogleAppsScript)で実現する方法を書きましたが、エラーが発生して実行が終了した状態でした。今回はこの解決とトリガーの設定を行います。
getTodayの取得に問題が?
エラーのまま実行は完了しましたが、メールは送信されていません・・・。
どうやら、24行目のgetTodayの取得に問題があるようです。
Exception: The parameters (String,String,String) don’t match the method signature for Utilities.formatDate.
行と列の取得方向が反対に。
よく見ると、行と列の取得方向が反対になっていました。列に向かってiが進んでいたので4回目以降のループでエラーが出ていたようです。行列を入れ替えます。
getRange(row, column)
Range(行, 列)
[rml_read_more]
実行してみます。
メールが届きました!!
念のため、先ほどのセルの値が関数のままでも大丈夫か試してみます。
届きました・・・!!
実行したらスクリプトを止める
このままでもOKな気もするのですが、メールが送信されたあとも数千行のループが実行され続けてしまうので、メールが送信された後はスクリプトを止めておきます。
実行後にreturn;でストップします。
GmailApp.sendEmail(toSend,toSubject,toBody);
return;
止まりました!
途中で止まりましたので、実行速度も早くなりました。
ただし、この場合は列内に同じ日付があった場合は最初にヒットした1回しか送信されませんので、2回以上送信する場合は別の工夫が必要です。今回の想定は1日1投稿という感じの想定ですので、1回送信されたタイミングでスクリプトを終了させます。
トリガーをセットする
あとは、毎日送信されるようにトリガーをセットします。
イベントのソースを時間主導型に変更します。
日付ベースのタイマーにして、あとは好みの時刻を設定します。
トリガーが設定できました!
これで、毎朝10時~11時のあいだに自動でドラッカー様の名言がメールで届くようになります。
GAS便利・・・!
まとめ
これで、毎日指定した時間に「今日の名言」といったメールが届きます。メルマガのような使い方の場合は他の方法を考える必要がありますが(あとは著作物の問題なども)、自分だけに届くようにして活用する場合には、今回の方法で実現できます。今日の自分にエールを贈り続けましょう😃
ご参考ください😃