2025.08.29
Laravelで空判定にif文を使うとハマる理由
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などへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索