Google Visualization Table では、データソースとして Google Spreadsheets を利用できます。ローカルなデータをデータテーブルとして利用することもできますが、本格的なアプリケーションを構築するのなら、Google Spreadsheets を利用することになるでしょう。
Google Visualization Table でデータソースとして Google Spreadsheets を利用する場合には、クエリを発行して、そのレスポンスからデータテーブルを取得します。ここでは、クエリを発行する際に取得するデータ数を制限しておき、必要に応じてクエリを再発行して次のデータを取得する方法を紹介します。
この方法は、該当するデータの量が膨大な場合だが、表示することになるデータが少ない場合に有効です。該当するデータの多くを表示する可能性が高い場合には、ローカル側で該当するデータをすべて保持する「Google Visualization Query Table の標準ページ処理の例」で示す方法の方がよいでしょう
function init(){
var dataSource="https://spreadsheets.google.com/ccc?key=0AvtCwTeZPCemdFpTWGUxSW9lcVNEeEYyeE9aM3B3RGc&hl=ja" ;
var container=document.getElementById('res');
var pageSize=5;
var t1=new queryTable(dataSource,container,pageSize);
t1.send();
}
function queryTable(dataSource,container,pageSize){
this.options={
page:"event",
pageSize:pageSize,
startPage:0,
pagingButtonsConfiguration:'both',
showRowNumber:true,
firstRowNumber:1,
sort:'disable'
};
this.sourcePage=0;
this.limit=pageSize+1;
this.offset=this.sourcePage * pageSize;
this.statement='select * order by A desc limit '+ this.limit+ ' offset ';
this.statements=this.statement + this.offset;
this.dataSource=dataSource;
this.container=container;
this.query= new google.visualization.Query(dataSource);
this.table= new google.visualization.Table(container);
this.dataTable={};
var self = this;
google.visualization.events.addListener(self.table, 'page', function(e) {self.handlePage(e)});
}
queryTable.prototype.send=function(){
var self = this;
self.query.setQuery(self.statements);
self.query.send(function(response) {self.handleResponse(response)});
}
queryTable.prototype.handleResponse=function(response){
var self = this;
self.dataTable={};
if(response.isError()) {
self.container.innerHTML=response.getDetailedMessage();
return;
}
self.dataTable = response.getDataTable();
self.table.draw(this.dataTable,this.options);
}
queryTable.prototype.handlePage=function(e){
alert(e['page']);
var self = this;
var indexPage=self.sourcePage + e['page'];
if(indexPage<0)return false;
if (e['page']==1 && self.dataTable.getNumberOfRows() <= self.pageSize)return false;
self.sourcePage=indexPage;
self.statements=self.statement+ (self.sourcePage * self.options.pageSize);
self.options['firstRowNumber']=(self.sourcePage * self.options.pageSize) +1;
self.send();
}
google.load('visualization', '1', {'packages':['table']});
google.setOnLoadCallback(init);
page イベントを処理することを示すため、あえて イベントオブジェクトの page プロパティの値をアラート表示させています。
ラッパを使わずにグローバルオブジェクトを活用している別のソースコードのページは、「Google Visualization Query Table のページイベントの処理の例」です。そちらの方がコードは理解しやすいと思います。
クエリであらかじめ件数を制限することなく、ローカル側でページ処理する方法です。
Google Visualization Query Table の標準ページ処理の例