今年の夏は映画が豊作ですね。
とりあえずマッドマックスを見てヒャッハー!な気分になったエンジニアMです。




さて、今回は「Google Apps Script」です。


Google Apps Scriptってなに?

googleのサービスはとても便利ですね。
Gmail、Googleカレンダー、Googleスプレッドシートなど
みなさんも何かしら使った事があるではないでしょうか?

Google Apps ScriptはこれらのGoogleサービスのプログラム環境になります。
Google Apps Scriptはjavascript互換のサーバサイドのスクリプト言語です。
※サーバサイドの技術なのでブラウザ機能などは呼び出せません。

Googleサービスを操り独自のプログラムを作る事もできます。



どうやって作るの?

Google Apps ScriptはGoogleの製品の一部にはメニューからエディターを呼び出す事が可能です。
または、Googleドライブから独自に作成する方法をとる事もできます。

今回はお手軽なエディター呼び出しの方法で試してみたいと思います。



・スプレッドシートの作成

Googleドライブから「新規」-「Googleスプレッドシート」を選択して新規スプレッドシートを作成します。





・スクリプトエディター起動

作成されたスプレッドシートの中から「ツール」-「スクリプト エディター」を選択します。



「空のプロジェクト」を選択します。


エディターが起動します。
この画面でプログラムを作って行く事になります。





今回やる事

さっとカレンダーを作成して共有する場合などはgoogleのspreadsheetsが便利です。
しかし、カレンダー作成って以外に手間ですよね。
特にスケジュールを組む場合などは休みの日などは判るようにしておきたいものです。

今回はスプレッドシート上にgoogleカレンダーから祝日を取得し、
開始日から終了日までのカレンダーを作成するだけのプログラムを作成します。




■ソース



//===========================================================
// カレンダー作成
//===========================================================

//-----------------------------------------------------------
// 作るカレンダーの設定
//-----------------------------------------------------------

var START_YEAR = 2015; // 開始する年を指定
var START_MONTH = 7; // 開始する月を指定
var START_DAY = 1;  // 開始する日を指定

var END_YEAR = 2016; // 終了する年を指定
var END_MONTH = 3;  // 終了する月を指定
var END_DAY = 31;  // 終了する日を指定


// 曜日と色を指定
var CHAR_WEEK = ["日","月","火","水","木","金","土"];
var COLOR_WEEK = ["red", "black", "black", "black", "black", "black", "blue"];


//-----------------------------------------------------------
// カレンダー作成
//-----------------------------------------------------------

// カレンダーを作成する関数
function makeCalendar() {
  
  // いつからいつまでのカレンダーを作るか
  var startDay = new Date(START_YEAR, START_MONTH - 1, START_DAY);
  var endDay   = new Date(END_YEAR , END_MONTH - 1, END_DAY);

  // 日本の祝日カレンダーから祝日を取得
  var holidays = {};
  var cal = CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
  var events = cal.getEvents(startDay, endDay);

  for (var cnt in events) {
    var eventTitle = events[cnt].getTitle();
    var eventStartTime = events[cnt].getStartTime();

    var eventMonth = eventStartTime.getMonth() + 1;
    var eventDay = eventStartTime.getDate();
    holidays[eventMonth + "/" + eventDay] = eventTitle;
  }


  // カレンダー配列作成
  var result = [], colors = [], result_tmp = [], colors_tmp = [];
  var currentTime = new Date(startDay.getTime());

  while (currentTime.getTime() <= endDay.getTime()) {

    var currentYear = currentTime.getFullYear();
    var currentMonth = currentTime.getMonth() + 1;
    var currentDay = currentTime.getDate();
    var currentWeek = currentTime.getDay();
    var currentWeekChar = CHAR_WEEK[currentWeek];
    var currentWeekColor = COLOR_WEEK[currentWeek]; // 色の指定
    var currentEvent = holidays[currentMonth + "/" + currentDay];
  var holidayChar = "";
    
  if (typeof(currentEvent) == "undefined") {
      currentEvent = "-";
      holidayChar = "";
    } else {
      currentWeekColor = "red";
      holidayChar = "・" + holidays[currentMonth + "/" + currentDay];
    }
    // イベント決定
    result_tmp.push(currentYear + "/" + currentMonth + "/" + currentDay + "(" + currentWeekChar + holidayChar + ")");
    // 色決定
    colors_tmp.push(currentWeekColor);
    // 次の日
    currentTime.setTime(currentTime.getTime() + 1000 * 60 * 60 * 24);
  }
  
  // イベントを追加
  result.push(result_tmp);
  // 色の指定
  colors.push(colors_tmp);
  
  //-----------------------------------------------------------
  // スプレッドシート側への書き込み
  //-----------------------------------------------------------
  
  // 表に設定する
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(2, 3, 1,result_tmp.length).setValues(result);
  // 文字に色を付ける
  sheet.getRange(2,3, 1,colors_tmp.length).setFontColors(colors);
  
  
}



簡単な解説行なうと開始日から終了日までをループで回し、
1日ずつ配列に格納していきます。

その際に情報を付加しています。


ポイントとしては
・CalendarAppを使って日本の祝日を取得している
・土日祝は表示を赤くしている
くらいです。




実行結果

Ctrl+Sで保存を行う事ができます。
スクリプトに名前をつけて保存します。




実行ボタンで実行する事が出来ます。
初回の実行のみ、確認が入ります。







スクリプトの実行が終わると、スプレッドシートに結果が反映されています。






おわりに

ごくごく初歩のプログラムでしたが、スクリプトを個別で作っておけば
さくっとテンプレートシートなどの作成も出来ます。

また、他のサービスと絡める事ができるのもGoogle Apps Scriptの良いところですね。





トンガルマンWebサイト
https://tongullman.co.jp/index.php
facebook
https://www.facebook.com/Tongullman

0 件のコメント:

コメントを投稿