2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2017.01.05
プログラミング「Handsontable」でExcelライクにデータ編集・その1
こんにちは、ESです。
以前このブログでjqGridのご紹介をしています(「【Web】【javascript】「jqGrid」で少しリッチなテーブルを作成する 基礎編」、「【Web】【javascript】「jqGrid」で少しリッチなテーブルを作成する 応用編」)が、今回はWebページ上でExcelのように編集ができちゃうグリッド「Handsontable」をご紹介します、の第1回です。
jqGridはその名のとおりjQueryが必要ですが、Handsontableにはいりません。
最低限、2ファイルだけでOKです。
まずGithubからソースをダウンロードします。
2017年1月現在での最新バージョンは0.29.2です。「Downloads」から圧縮ファイルをダウンロードして、適当なフォルダに解凍しましょう。
解凍したフォルダから作業フォルダへ必要ファイルをコピーします。
作業フォルダの構成はこのようにします。
|-index.html |-js/ | |-handsontable.full.js | |-script.js |-css/ | |-handsontable.css
このうち、index.htmlとscript.jsを作成していきます。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Handsontable Sample</title> <link rel="stylesheet" href="css/handsontable.css" /> </head> <body> <div id="grid"></div> <script src="js/handsontable.full.js"></script> <script src="js/script.js"></script> </body> </html>
var data = [ [1, 'banana', 100], [2, 'apple', 50], [3, 'orange', 30] ]; var grid = document.getElementById('grid'); new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格']} );
index.htmlでscriptタグがヘッダの中にないのが気になる方は、jQueryを使って$(document).readyでどうぞ。
実行すると、こんな感じになります。
Handsontableの場合、こんなふうにグリッド上で直接編集を行うことができます。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true} );
するとこうなります。
ちなみにこの状態だと見た目は変わりません。クリックしても編集できないだけです。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": true}, {"readOnly": false}, {"readOnly": false} ]} );
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": true}, {"readOnly": false}, {"readOnly": false, type: "numeric"} ]} );
自動でバリデーションチェックをしてくれます。さらに数値は自動的に右寄せ表示になります。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": false, type: "numeric"}, {"readOnly": false}, {"readOnly": false, type: "numeric"} ], minSpareRows: 1} );
新しい行のIDを入力したいのでIDの読み取り専用は削除して、代わりに数値用バリデーションチェックを入れました。
一番下に「minSpareRows」で指定した数だけ空行が表示されます。空行に何か入力されると、さらに空行ができます。
こんな感じ。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": false, type: "numeric"}, {"readOnly": false}, {"readOnly": false, type: "numeric"} ], minSpareRows: 1, columnSorting: true, sortIndicator: true} );
「columSorting」をtrueにすると、該当列のヘッダをクリックでソートが可能になります。どの列でもできます。
1回クリックで昇順、2回クリックで降順、3回でソート解除です。
「sortIndicator」をtrueにすると、ソート時に昇順・降順を示す三角が該当列のヘッダに表示されます。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": false, type: "numeric"}, {"readOnly": false}, {"readOnly": false, type: "numeric"} ], minSpareRows: 1, columnSorting: true, sortIndicator: true, colWidths: 100} );
全列一気に広がりました。
列ごとに設定したいなら、こう。
new Handsontable(grid, {data: data, colHeaders: ['id', '名前', '価格'], rowHeaders: true, columns: [{"readOnly": false, type: "numeric"}, {"readOnly": false}, {"readOnly": false, type: "numeric"} ], minSpareRows: 1, columnSorting: true, sortIndicator: true, colWidths: [50, 120, 80]} );
他にもいろいろありますが、長くなりすぎるので今回はここまで。
次回はDBとの連携とかもやっていこうと思います。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索