Googleスプレッドシートに集めた情報をGoogle apps Script(GAS)を使ってPDFにしてメールで自動配信する

Googleスプレッドシートに集めたデータからレポートを作成して毎週の自動でメールで送られるようにする方法です。


会社でもそうだと思いますが、KPIなどを一箇所に集めて定期的に確認している方が多いのではないでしょうか。

かくいう私もそうなのですが、ただ、データがまとまって報告書だったり、PPTになってからKPIを見ると「こんなに悪かったのか」とその時になって気づくということが多いのです。

その時になっていろいろと分析しようとしてもその期間分振り返ることになり、覚えていないことも多く、記録を遡るのに時間がかかります。

できる限りリアルタイムでこれらの情報を確認した方が分析の手間がなくなるわけですが、そのために自分からそのデータを毎日見るようにするというのも日々の業務に追われてなかなかめんどくさい。

ということで、できる限りリアルタイムで状況を把握するためにKPIを自動配信するという対策を考えてみました。

過去記事にありますようにプライベートでも数字を集計していますが、まずはこれを自動化をしました。Googleスプレッドシートの一つの機能「Google apps Script」を使うと簡単に実現できました。

Googleスプレッドシートに情報を集める

これまでIFTTTやWorkflowを使って色々なデータをGoogleスプレッドシートに集約する方法を紹介しました 。

前述のようにデータを集めるのは非常に簡単になったのですが、数も多いのではなかなか確認しに行くのもめんどくさいんですよね。

ということでまずは一目見れば簡単に状況を把握できる報告レポートを作成します。

他のスプレッドシートを参照する

私の場合は読書量、ブログ記事更新数、ギター練習時間をそれぞれ一つのGoogleスプレッドシートに記録しています。

それぞれのスプレッドシートの中では記録している生データを加工して見たい情報を作っているのですが、これらを「importrange」という関数を使うとひとつのスプレッドシートにまとめることができます。

「importrange」を使うためには参照したいスプレッドシートのリンクが必要ですが、これも以下の共有ボタンから簡単にコピーできます。

「importrange」に入力する値は以下のようになっています。
IMPORTRANGE(“参照したいスプレッドシートのURL”, そのシートで参照したい範囲)

例えば、こういう感じ。

= importrange("https://〇〇〇〇", "シート1!A1:D5")

Google Apps ScriptでレポートをPDF化してメールで送る

複数のスプレッドシートから情報を集めたひとつのスプレッドシート=レポートをこれで作成することができます。

レポートはそこに置いておくだけでは見に行かなければならず、経験上、あまり見ません。

これだとレポートの意味がないので自動でメールで送られてくるようにします。
(自動で報告しされるようにします。)

自動で報告させるためにいろいろと調べて見ましたが、1番簡単な方法はGoogle Apps Scriptを使用する方法でした。

エクセルでいうところのマクロ、Visual Basic です。
今はPC版からしか編集できないようですが、これを利用するとそのシートで様々なことができます。

まず、スクリプトを設定したいスプレッドシートで「ツール」の中の「スクリプトエディタ」をクリックしてスクリプト編集画面を開きます。

ツールからエディタを起動
ツールからエディタを起動

そして以下のようにスクリプトを組みます。

function scoreboard() {
   //日付を作成する
  var date = new Date();
  var today = date.getFullYear() +"/"+ (date.getMonth()+1) +"/"+ date.getDate();
 
 //スプレッドシートを指定
  var mySheet = SpreadsheetApp.getActiveSpreadsheet();
  
 //PDFを作成 
  var pdfname = "スコアボード("+today+").pdf";
  var mypdf = mySheet.getAs('application/pdf').setName(pdfname);
  
  var strBody = "今週のスコアボードです。";
  
 //メールを送信
  GmailApp.sendEmail("メールアドレス","今週(" + today + ")のスコアボード",strBody,{attachments:mypdf});
}

このスクリプトだとこのスプレッドシート全体をPDF化しています。

本当はグラフのみをPDFにしようとしたのですが、この関数はスプレッドシート単位に使用できるもののようでできませんでした。
関数によって対象がスプレッドシートなのか、その中のシートなのか、など違いがあるようなのでそれを把握してスクリプトを組む必要があります。
いかのGASのマニュアルを見るとそのあたりが書いてあります。(英語です。見にくいですが、結局こういうREFERENCEの画面が一番わかる)
Class DocumentApp | Apps Script | Google Developers

ちなみに私が組んだスクリプトは、

  1. date.getFullYear()、date.getMonth()、date.getDate()で送信する日を取得
  2. getAs(‘application/pdf’)で指定したスプレッドシートをPDF化
  3. GmailApp.sendEmailで指定したところにメールを送る

となっています。

GmailApp.sendEmailの中に{attachments:mypdf}を追加すればファイルを添付できます。(mypdfはスクリプト内で作成したPDFの名前)

以上のように組むと、メールの件名は「今週(年/月/日)のスコアボード」、本文は「今週のスコアボードです。」、PDFのタイトルは「スコアボード(年/月/日).pdf」となります。

GASでメールを送ることに関しては以下のサイトが参考になりました。
GASでのメール送信についてまとめてみる – Qiita

毎週の結果を確認して次の週の行動を改善する

このレポートは今の所、週間で発信されるようにしています。

これらの数字を見ながら達成するにはどうすればいいのかを考えているところです。

やってみてやはり日々の行動が目に見えるようになると「やらないとなぁ」「どうすれば達成できるのか」を考えるようになりますね。

ここまでの体制を作るのは少し大変かもしれませんが、やってみて損はないなぁと我ながら思いました。

コメントを残す