広告の限界を超える|セールス
広告の限界を超える|セールス
2017.02.23

【ディレクターもプログラミングを学ぼう】Google Apps ScriptでGoogleスプレッドシートを操作してみよう

Jack

こんにちは。ディレクターのJackです。
ディレクターもプログラミングを学ぼうシリーズの第2弾は、Google Apps ScriptでGoogleスプレッドシートの情報を操作してみるです。

皆さんは、Googleスプレッドシートは使っていますか?
私は日常業務でバリバリ使っています。このツールが無いと、業務が成り立ちません。
ご存じの方も多いかと思いますが、このGoogleスプレッドシートは、Google Apps Script ( 以下、GAS )というJavaScriptの派生言語を利用して、簡単に情報を操作することができます。

ディレクターがGASを学ぶメリット

さて、ディレクターがGASを学ぶメリットはなんでしょう?

GASを利用することで、Googleスプレッドシートを操作して処理を自動化することができたり、オリジナルメニューを作成したりと、今までGoogleスプレッドシートの標準機能では提供されていない機能を独自に実装することができるのです。

GASを使うと便利な機能を、「実装編」でお話できればと思います!

実装編

何を実装するの?

結論として「要件管理表メール通知機能」なるものを実装してみます。

弊社ではタスク管理の1つとして、要件管理表というものをGoogleスプレッドシートで作成し、利用しています。

もちろん案件に応じて、Redmine や GitHub Issue、JIRA 等の ITS も利用するケースはありますが、今回は要件管理表を例に進めます。

Redmine や GitHub等は、Issue が登録されたタイミングでメール通知が飛ぶのですが、Googleスプレッドシートで作成した要件管理表はそのような機能はありません。
Googleスプレッドシートで管理されているタスクも、移動中にメールで気軽に確認したい!
そう、そのような機能がないなら作れば良いのです!

仕様の説明

メール送信の仕様は下記のようにします。

  1. 担当者が要件管理表にタスクを書く
  2. タスクのタイトルを任意のメールアドレスへ定期的に送信
  3. メール受信

まずは、とてもシンプルな仕様でチャレンジしてみます。
また、今回仕様するタスク表は下記となります。

148715792638961200_10

ソースコード

Googleスプレッドシートの「ツール」 → 「スクリプトエディタ」をクリックして、GAS記述用のエディタを開いてみましょう。
任意のファイル名を指定して、下記コードを書いていきます。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet(); /* 現在のシートを取得 */
  var data = sheet.getDataRange().getValues(); /* 全セルデータを2次元配列で取得 */

  for (var i = 0; i < data.length; i++) {
    /* 送信済みでない場合は送信 */
    if (data[i][3] === '') {
      data[i][3] = '済'; /* 送信したら文字列「済」をセットする */
      MailApp.sendEmail("hogehoge@hoge.com", data[i][1], data[i][2]); /* 送信処理 */
      sheet.getDataRange().setValues(data); /* 文字列「済」をシートに反映し、再送を防ぐ */
      break;
    }
  }
}

実行してみる

手動実行する

スクリプトエディタに「実行ボタン」があるので、クリックしてみましょう。
記述したコードを実行することができます。

148772592129872700_93

実行すると、スプレッドシートの送信フラグが「済」になったことを確認できました。
指定したメールアドレスへの送信が完了すると、送信フラグが「済」になる仕様です。

148715808915010300_15

定期実行する

「リソース」 → 「すべてのトリガー」をクリックし、cronのように定期実行することができます。
1 時間に 1 回実行するには、下記のように設定します。

148715823179053300_36

これで、定期実行ができるようになりました。とても便利ですね!

おわりに

いかがでしたか? 難しそうな GAS も、意外に簡単に実装することができました。
これでガンガン業務効率化ができそうですね!

j a v a