ガントチャート

グラフ本体

新チャートの中でも最も実用性が高いのが、このチャート。スタート日と終了日を持ってして、ガントチャートを作ってくれるすぐれもの。優れているポイントは、例えば、今回のケースのように、人名単位でグループ化した上で、ワークの内容が入ってくれること。ワークのタイプによってカラーリングも統一してくれる点。注意すべきは、開始日付もしくは終了日付のどちらかが空だとエラーになるので、本来であれば、queryで投げる前にそういったデータはフィルタしておくと良い。フィルタをする場合には、query.send()の前に下記のようなクエリ文を記述すると良い。今回は4列のシートなので以下のようになる。

query.setQuery('SELECT B,C,D,E WHERE D is not null AND E is not null and D != "" AND E != ""');

また、開始日付より終了日付が前に記述してしまってるケースの場合もエラーで表示されないので、そちらは、スプレッドシート側で制御を入れておくと良い。開始日付より終了日付が前に来ている時にはエラー表示するか?それとも、クリアして再入力を促す仕組みが必要である(onEditのイベントトリガーで判定すると良い)。なお、タイムラインチャートは最低3つ(項目名、開始日、終了日)が必要です。さらに、タスク名の4つ目があればこのようにガントチャートになります。左端のカラムから項目名、タスク名、開始日、終了日とならべてグラフにします。

※IEだと不具合があるとかないとか。妙なエラーがタスクに触ると出てくる事があります。

ソースコード

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="sample1" />
<Content type="html">
<![CDATA[

//とりあえずライブラリ読み込み

<script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization',
       'version':'1','packages':['timeline']}]}"></script>
<script type="text/javascript">
google.setOnLoadCallback(initialize);
//初期化
function initialize() {    
var query = new google.visualization.Query('https://docs.google.com/spreadsheet/pub?key=0AjN10lCzkUqkdHJqaUxkaUdyOUR3VGQwM3VHWTdWcGc&single=true&gid=8');
query.send(handleQueryResponse);
}
function handleQueryResponse(response) {
  //レスポンスデータを受け取る
  var data = response.getDataTable();
//行の数を取得する
  var numRows = response.getDataTable().getNumberOfRows();

//カラムを設定し、データテーブルを用意

  var dataTable = new google.visualization.DataTable();
  dataTable.addColumn({ type: 'string', id: 'Name' });
  dataTable.addColumn({ type: 'string', id: 'Job' });
  dataTable.addColumn({ type: 'date', id: 'Start' });
  dataTable.addColumn({ type: 'date', id: 'End' });

//データテーブルにデータを流し込む

  for(i=0;i<numRows;i++){

var row = [];

row.push(data.getValue(i, 0));

row.push(data.getValue(i, 1));

row.push(new Date(data.getValue(i, 2)));

row.push(new Date(data.getValue(i, 3)));

dataTable.addRow(row);

   }
//チャートを描画する

var chart = new google.visualization.Timeline(document.getElementById("schedule"));

chart.draw(dataTable,null);

}
</script>
<div id="schedule" style="width: 900px; height: 500px;"></div>
]]>
</Content>
</Module>

ポイント

  • 読み込むパッケージはtimelineであるので、きちんと冒頭で定義しておくこと。
  • カラムをきちんと設定しないとデータテーブルを用意しただけでは反映されない。
  • データテーブルに流し込むときには、new Dateで入れ込むデータの型変換をしておく。

参考リンク