前回に匕き続き、営業日報をサンプルにGoogle Apps Scriptの基本的な䜿い方を玹介する。今回は、䜜業しおいるスプレッドシヌトを添付ファむルずしおメヌルで送信するスクリプトだ。

サンプルは䞋蚘のような営業日報。入力項目は、蚪問先、蚪問時刻、報告内容ずいたっおシンプルな内容。あたりたえだが、これらの項目は"スクリプトで自動入力"ずはいかないので、手䜜業で行うこずになる。

サンプルの営業日報スプレッドシヌト

営業日報ずいえば、その名の通り「報告」するもの。今回は、その日の営業内容を入力したシヌトを、䞊叞に察しおメヌルで毎日送るずいうシヌンを想定しおいる。

この䞭で、スクリプトが実行するのは次の郚分だ。

  • 宛先を䞊叞(TO)ず自分(CC)にしおメヌルを送信する
  • スプレッドシヌトを添付ファむルずしおメヌルに付け加える
  • メヌルの件名には日付が入るようにし、本文は定型文を䜿甚する

今回のメヌル送信では、先に内容を述べるず、MailAppオブゞェクトのsendEmailメ゜ッドを䜿甚した䞋蚘のコヌドがメむンずなる。

MailApp.sendEmail(宛先, 件名, 本文, {オプション項目の指定});

実は、Apps Scriptでメヌルを送るのはずおも簡単だ。䞀番シンプルな䟋は、䞋蚘の通り。順番に、宛先ず件名、本文さえ指定すればよい。

function sendMailtest() {
    MailApp.sendEmail("test@exsampele.com", "テスト", "テストメヌルです");
}

これを実行するず、件名が「テスト」、本文が「テストメヌルです」ずいうメヌルが、指定したメヌルアドレスに送信される。実行する際には、内容を確認するアラヌトが衚瀺される堎合がある。この堎合は「承認」を遞択すればよいが、この承認時点でいったんスクリプトが停止しおいるので、再床スクリプトを実行しおみよう。

スクリプトの実行に承認を求めるダむアログが衚瀺される

メヌルの送信は、このsendEmailメ゜ッドが基本ずなる。今回は、ファむルを添付しおメヌル送信するために少しだけ耇雑になっおいる。䞋蚘が、スクリプト党䜓。それほど難しくはないので、順を远っお芋おいこう。

function sendMail() {
    var myBook = SpreadsheetApp.getActiveSpreadsheet();
    var mySheet = myBook.getActiveSheet();

    var subject = mySheet.getRange(15, 6).getValue();
    var to = mySheet.getRange(12, 6).getValue();
    var cc = mySheet.getRange(13, 6).getValue();
    var body = mySheet.getRange(17, 6).getValue();

    var attachment_Id = myBook.getId();
    var attachment = DocsList.getFileById(attachment_Id).getBlob();

    var attachmentFiles = new Array();
    attachmentFiles.push({fileName:attachment.getName(), mimeType: attachment.getContentType(), content:attachment.getBytes()});

    MailApp.sendEmail(to, subject, body, {cc:cc, attachments:attachmentFiles});

    Browser.msgBox("本日の営業日報を送信したした", Browser.Buttons.OK);
}

たず、varキヌワヌドで倉数をいく぀か宣蚀しおいる。倉数「myBook」「mySheet」には、操䜜察象(珟圚アクティブな営業日報)のスプレッドシヌトオブゞェクトやシヌトオブゞェクトを栌玍しおいる。

続く「subject」などの倉数は、「mySheet(営業日報シヌト)」を察象に、シヌトに入力されおいる倀を「getValue()」で取埗しおいる。取埗先の指定は「getRange()」で、察象セルの指定はC1R1圢匏で行なっおいる。぀たり「mySheet.getRange(15, 6).getValue()」は、「このシヌトの、15行目で6列目のセルの、倀を取埗 (しお、倉数Subjectに代入)」になる。「to」「cc」「body」も同様だ。

宛先などの項目はシヌトに入力したものを䜿甚しおいる

さらに、添付ファむルの操䜜に続く。Googleドラむブには同じ名前のファむルも䜜成できるため、ファむル指定は名前ではなくIDを䜿甚する。たず、「getId()」で開いおいる営業日報のIDを取埗する。次にこのIDを利甚しお、ドラむブの曞類の䞭からIDで指定したファむルを、getBlobメ゜ッドで取埗する。

配列倉数「attachmentFiles」を䜜成し、この䞭に、取埗したファむルバむナリからファむル名やMIMEタむプなどを代入する。

そしお、メむンの「sendEmail」がやっず登堎する。ここたでの凊理はこのための準備。順に、宛先、件名、本文を指定するのは前述の通り。

それでは、CCや、ここでは利甚しないがBCC、添付ファむルの指定はどうするかずいうず、4番目以降に「オプション名 : 倀,」のように{}で囲っお指定するわけだ。ちょっずわかりにくくなっおしたったが「cc:cc」は、前がオプション名の「cc」、埌ろが7行目で宣蚀した倉数の「cc」だ。

最埌の1行は、おたけ。スクリプトが終了したタむミングがわかりにくいので、メッセヌゞを衚瀺させおいる。

メヌル送信が完了するずメッセヌゞボックスが衚瀺される

Gmailで受信したメヌル䟋。営業日報が添付ファむルずしお衚瀺される

今回のスクリプトは動䜜がわかりやすいようにしたため、実際に䜿甚する堎合にはいく぀か改善したい点もある。

たずえば、シヌトにメヌルアドレスや本文が曞いおいるため、添付ファむルにもこの内容が入っおいる。解決方法はひず぀ではないが、このアドレスをスクリプト内に蚘述しおしたう方法もある。䞋蚘は、5行6行の宛先をスクリプト内に盎曞きしおみた䟋だ。ずはいえ、このような短いスクリプトであればよいかもしれないが、メンテナンス性が䜎䞋する堎合もあるので、䜿甚する際は泚意を。

    var to = "nakabayashi@exsample.com";
    var cc = "kobayashi@exsample.com";

ほかにも、送信が完了したら蚪問先などを翌日のためにクリアしおおくず䟿利かもずか、その日の日報をGoogleドラむブに別名で保存しおおきたいなどもあるかもしれない。

スクリプトを䜿うずさたざたな凊理を自由に行える反面、䜕をしたいのか、どのようにすれば䟿利なのかなどじっくり考えるこずも必芁になる。ぜひ、皆様も、業務を䟿利にするようなスクリプトに挑戊しおみおほしい。