libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

Charts Servicesによるデータテーブルとチャートの利用 (6/6)

作成:2011-09-26 08:58
更新:2011-09-26 08:58

■スプレッドシートのデータからチャートを生成する

では、このチャート機能をもう少し実用的に使うことを考えてみましょう。スクリプトの中で表示する内容を直接記述していたのでは、汎用的なスクリプトにはなりません。そこで、あらかじめ作成しておいたスプレッドシートからデータを取り出し、それをもとにチャートを作成するサンプルを考えてみることにしましょう。

まず、データを保管するスプレッドシートを作成しておきます。Googleドキュメントで新たに表計算のドキュメントを作り、最初の「シート1」というシートに、左上から順にデータを記述しておきましょう。
支店名    上半期    下半期
東京    1024    891
大阪    659    478
名古屋    237    395
数値などはそれぞれ適当に変更してかまいません。ただ、今回は横3列×縦4行の固定データでチャートを作成するので、それにあわせてデータを用意して下さい。

下のリストが、サンプルコードです。openById"……ID……"部分には、それぞれのスプレッドシートのIDを指定してください。これで、スプレッドシートの「シート1」のA1~C4までのデータを取り出し、グラフ化して表示をしています。

ここでは、まずSpreadsheetApp.openByIdでスプレッドシートを開き、getSheetByNameでその中から必要なシートを取得しています。今回はサービスとして公開利用する形を考えていますので、ActiveSheetではなく、このように指定のシートをオープンして利用するようにしました。

後は、必要に応じてgetRange().getValueでセルの値を取り出し、データをaddRowしていくだけです。SpreadsheetApp/SheetCharts Servicesがわかれば、このように連携してデータを処理していくことも簡単に行えます。

ここまでくると、「このチャート、そのままスプレッドシートに貼って使えないの?」と思うかも知れません。残念ながら、今のところは無理なようです。Sheet側にそのための仕組み(メソッド)が用意されていないからです。ただし、Google Apps Scriptは現在も進化中ですから、いずれ可能になるかも知れません。期待して待ちましょう!

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function doGet() {
	var sheet = SpreadsheetApp.openById("……ID……").
			getSheetByName("シート1");
	var data = Charts.newDataTable()
			.addColumn(Charts.ColumnType.STRING, 
			sheet.getRange(1, 1).getValue());
	for(var i = 2;i <= 3;i++){
		data.addColumn(Charts.ColumnType.NUMBER, 
				sheet.getRange(1, i).getValue());
	}
	for(var i = 2;i <= 4;i++){
		var arr = [sheet.getRange(i, 1).getValue(),
				sheet.getRange(i, 2).getValue(),
				sheet.getRange(i, 3).getValue()];
		data.addRow(arr);
	}
	data.build();

	var chart = Charts.newColumnChart()
		.setDataTable(data)
		.setTitle("携帯端末販売")
		.setDimensions(400, 350)
		.setStacked()
		.setColors(["#FF9999","#99FF99"])
		.build();

	var uiApp = UiApp.createApplication().setTitle("サンプルチャート");
	uiApp.add(chart);
	return uiApp; 
}

※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る