JavaScriptのFileReader APIを利用して、CSVファイルを読み込み、その内容をHTMLテーブルとして表示する方法について解説します。
特に FileReader.readAsText()
メソッドの使用方法と、その結果をもとにHTMLテーブルを動的に生成する手法に焦点を当てています。
JavaScript初心者から中級者の方まで、実務でのデータ表示や学習の参考に、ぜひ最後までご覧いただけると嬉しいです。
FileReader.readAsText()
JavaScriptのFileReader.readAsText()
は、指定したBlobまたはFileオブジェクトの内容を読み取り、その結果をテキストとして返すことができるメソッドです。
// ファイルのinput要素を取得
var inputElement = document.getElementById('inputFile');
// ファイルが選択されたときのイベントリスナーを設定
inputElement.addEventListener('change', function() {
// 選択されたファイルを取得
var file = this.files[0];
// FileReaderのインスタンスを作成
var reader = new FileReader();
// ファイルの読み込みが終了したときのイベントリスナーを設定
reader.onload = function(e) {
// ファイルの内容をテキストとして取得し、コンソールに表示
console.log(e.target.result);
};
// ファイルをテキストとして読み込む
reader.readAsText(file);
});
このメソッドを利用することで、ファイルの内容をブラウザ内でJavaScriptから直接読み取ることが可能になります。
この記事のコードは、FileReader.readAsText()
を使用してCSVファイルを読み込み、その内容をパースしてHTMLテーブルに変換するという処理を行なっています。
CSVをインポートしてテーブルに出力するサンプル
それでは、早速サンプルです。
「ファイルを選択」でCSVファイルを取得し、「テーブルを生成」のボタンをクリックすると、CSVからテーブルの表が表示されます。
実装の手順と方法
コードの詳細の前に、実装の手順と方法について解説していきます。
まずは、HTMLを記述します。
設置したい場所に記述しましょう。
<div class="csvFileWrapper">
<input type="file" id="csvFile" accept=".csv">
</div>
<button onclick="generateTable()">テーブルを生成</button>
<div id="output"></div>
次に、JavaScriptのコードを記述します。
コードは <body>〜</body>
で、</body>
の閉じタグ(クロージングタグ)の前に記述しましょう。
// 関数generateTableを定義します。この関数はCSVファイルをHTMLのtable形式に変換します。
function generateTable() {
// 'csvFile'というidを持つ要素(ここではファイルを選択するinput要素)を取得します。
var fileInput = document.getElementById('csvFile');
// 選択されたファイルのリストから最初のファイルを取得します。
var file = fileInput.files[0];
// FileReaderオブジェクトを生成します。これによりファイルの読み込みを行うことができます。
var reader = new FileReader();
// ファイルの読み込みが完了したときに呼び出されるイベントハンドラを設定します。
reader.onload = function(e) {
// ファイルの内容をテキストとして取得します。
var contents = e.target.result;
// ファイルの内容を改行('\n')で分割し、各行を要素とする配列を作成します。
var lines = contents.split('\n');
// HTMLのtable要素を新規に作成します。
var table = document.createElement('table');
// 各行について処理を行います。
for (var i = 0; i < lines.length; i++) {
// HTMLのtr要素(テーブルの行)を新規に作成します。
var row = document.createElement('tr');
// 行をカンマ(',')で分割し、各セルを要素とする配列を作成します。
var cells = lines[i].split(',');
// 各セルについて処理を行います。
for (var j = 0; j < cells.length; j++) {
// HTMLのtd要素(テーブルのデータセル)またはth要素(テーブルのヘッダーセル)を新規に作成します。
// ここでは、最初の行(i === 0)のセルをth要素とし、それ以外のセルをtd要素としています。
var cell = document.createElement(i === 0 ? 'th' : 'td');
// セルのテキスト内容を設定します。
cell.textContent = cells[j];
// 作成したセルを行に追加します。
row.appendChild(cell);
}
// 作成した行をテーブルに追加します。
table.appendChild(row);
}
// 'output'というidを持つ要素の内容を空にします。
document.getElementById('output').innerHTML = '';
// 作成したテーブルを'output'というidを持つ要素に追加します。
document.getElementById('output').appendChild(table);
};
// 選択されたファイルをテキストとして読み込みます。
// 読み込みが完了すると上で設定したonloadイベントハンドラが呼び出されます。
reader.readAsText(file);
}
最後にCSSを書きましょう。
.csvFileWrapper {
display: flex;
justify-content: center;
margin-bottom: 20px;
}
これで完成です。
ざっくりとしたコードの解説
コードは、HTML・JavaScript・CSSの3種類です。ざっくりですが、順に解説していきます。
HTML
HTMLは、CSVファイルのアップロードとテーブル生成に関連する要素を含みます。
まず、「csvFileWrapper」というclassを持つ div
要素の中に、CSVファイルを選択するための input
タグが配置されています。
input
要素のidは「csvFile」で、「.csv」ファイルのみを受け入れます。
<div class="csvFileWrapper">
<input type="file" id="csvFile" accept=".csv">
</div>
<button onclick="generateTable()">テーブルを生成</button>
<div id="output"></div>
そして、「テーブルを生成」のボタンをクリックすると generateTable()
というJavaScriptの関数が実行され「output」の div
要素にHTMLテーブルが挿入されます。
JavaScript
JavaScriptのコードは、CSVファイルをHTMLテーブルに変換するJavaScript関数 generateTable()
を定義しています。
まず、選択されたCSVファイルを FileReader
を使って読み込み、その結果を改行で分割し、各行を処理するループを実行します。
// 関数generateTableを定義します。この関数はCSVファイルをHTMLのtable形式に変換します。
function generateTable() {
// 'csvFile'というidを持つ要素(ここではファイルを選択するinput要素)を取得します。
var fileInput = document.getElementById('csvFile');
// 選択されたファイルのリストから最初のファイルを取得します。
var file = fileInput.files[0];
// FileReaderオブジェクトを生成します。これによりファイルの読み込みを行うことができます。
var reader = new FileReader();
// ファイルの読み込みが完了したときに呼び出されるイベントハンドラを設定します。
reader.onload = function(e) {
// ファイルの内容をテキストとして取得します。
var contents = e.target.result;
// ファイルの内容を改行('\n')で分割し、各行を要素とする配列を作成します。
var lines = contents.split('\n');
// HTMLのtable要素を新規に作成します。
var table = document.createElement('table');
// 各行について処理を行います。
for (var i = 0; i < lines.length; i++) {
// HTMLのtr要素(テーブルの行)を新規に作成します。
var row = document.createElement('tr');
// 行をカンマ(',')で分割し、各セルを要素とする配列を作成します。
var cells = lines[i].split(',');
// 各セルについて処理を行います。
for (var j = 0; j < cells.length; j++) {
// HTMLのtd要素(テーブルのデータセル)またはth要素(テーブルのヘッダーセル)を新規に作成します。
// ここでは、最初の行(i === 0)のセルをth要素とし、それ以外のセルをtd要素としています。
var cell = document.createElement(i === 0 ? 'th' : 'td');
// セルのテキスト内容を設定します。
cell.textContent = cells[j];
// 作成したセルを行に追加します。
row.appendChild(cell);
}
// 作成した行をテーブルに追加します。
table.appendChild(row);
}
// 'output'というidを持つ要素の内容を空にします。
document.getElementById('output').innerHTML = '';
// 作成したテーブルを'output'というidを持つ要素に追加します。
document.getElementById('output').appendChild(table);
};
// 選択されたファイルをテキストとして読み込みます。
// 読み込みが完了すると上で設定したonloadイベントハンドラが呼び出されます。
reader.readAsText(file);
}
各行はさらにカンマで分割され、HTMLテーブルの行とセルを生成します。生成されたテーブルは、HTMLの「output」というidの要素内に追加されます。
CSS
CSSのコードは、「csvFileWrapper」というクラス名を持つ要素にスタイルを適用しています。
.csvFileWrapper {
display: flex;
justify-content: center;
margin-bottom: 20px;
}
要素はフレックスボックスで表示され、その子要素は中央に配置されます。また、要素の下側には20pxのマージンが設定されています。
CSSはこれだけなので、テーブルのデザインをいじるにはCSSを追記してみてください。
さいごに
今回は、CSVをインポートしてテーブルで表示するコードについての解説でした。
コード自体も少なく、カスタマイズもしやすいので是非参考にしてみてください。