2011年7月22日金曜日

【使えるパーツ】メール送信(3)宛先が複数ある場合

A列に入力された全てのメールアドレスにメール送信するサンプルです。


まず、スプレッドシートを新規作成してから、スクリプトエディタを起動し、以下のスクリプトを記述します。
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "実行", functionName: "myFunction"}];
  ss.addMenu("拡張", menuEntries);
}
function myFunction() {
  var sh = SpreadsheetApp.getActiveSheet();
  var subject = sh.getRange("B2").getValue();
  var body = sh.getRange("C2").getValue();
  var mail_cc = Session.getActiveUser().getEmail();
  var rg = sh.getDataRange();
  var rows = rg.getLastRow(); //最終行を取得
  var values = rg.getValues(); //データを配列に格納
  for (var i = 1; i < rows; i++) {
    var mail_to = values[i][0];
    MailApp.sendEmail(mail_to, subject, body, {cc: mail_cc});
  }
  Browser.msgBox("メールを送信しました!");
}

このスクリプトを保存し、スクリプトエディタも閉じます。


更に、スプレッドシートも保存し、スプレッドシートの画面も閉じます。


一旦閉じたスプレッドシートを開くと「拡張」メニューが追加されます。


2行目に、宛先、件名、本文を入力し、「拡張」メニューから「実行」を選択します。


初めて実行した時は以下のメッセージが表示されます。
ここで「OK」を押して承認しないとスクリプトは実行されません。


ただし、承認した時はスクリプトが実行されていませんので「拡張」メニューから「実行」をもう一度選択してスクリプトを実行します。




このスクリプトのポイントは、以下の3点です。
・シート.getDataRange()でレンジを取得
・レンジ.getLastRow()で最終行を取得
・values = rg.getValues()でレンジ内のデータを2次元配列に格納

【参考にしたサイト】
Google Code > Tutorial: Creating Your First Spreadsheet Script
http://code.google.com/intl/ja/googleapps/appsscript/articles/yourfirstscript.html
Google Code > Tutorial: Sending emails from a Spreadsheet
http://code.google.com/intl/ja/googleapps/appsscript/articles/sending_emails.html
Mail Services > Class MailApp > method sendEmail(recipients, subject, body, optAdvancedArgs)
http://code.google.com/intl/ja/googleapps/appsscript/class_mailapp.html#sendEmail
Spreadsheet Services > Class Range > method getValues()
http://code.google.com/intl/ja/googleapps/appsscript/class_range.html#getValues



【おまけ】新ブログを開設しました。
『ExcelユーザーのためのGoogleスプレッドシート入門』
Excelはフツーに使えるよという方でも、Googleスプレッドシートを使った時にはアレッと思うことが結構あるものです。そういう方々向けの企画です。


0 件のコメント:

コメントを投稿