JS

ネイティブネタ帳

UI

モーダル

タブ

ドロワー

スライダー

スクロール

アコーディオン

目次

ローディングアニメーション

ツールチップ

ヘッダー

テーブル

グラフ

背景

ニュースティッカー

フォーム

フォーム

文字

文字の装飾

文字の操作

文字のカウント

数字の操作

ウィンドウ

ウィンドウ操作

タイトルの操作

ページ遷移時の動き

class

classの操作

要素

要素の操作

要素の追加

API

WP REST API

Google Books APIs

楽天市場API

openBD

画像・動画

画像の操作

YouTube

リンク

Google Analytics

cookie

検索

検索

お気に入り登録

JavaScriptのFileReader.readAsText()でCSVをインポートしてテーブルで表示

お気に入り登録をすると、お気に入り記事一覧に登録することができます。

JavaScriptのFileReader.readAsText()でCSVをインポートしてテーブルで表示

JavaScriptのFileReader.readAsText()でCSVをインポートしてテーブルで表示

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からテーブルの表が表示されます。

エラーハンドリングは入れていません

サンプルは、CSVデータが完全に正しいと仮定して動きます。その為、全ての行が同じ数のセルを持ち、ファイルに不正な文字や改行が含まれていないと仮定しているので、実際に使う場合はエラーハンドリングやデータの検証を行うようにしましょう。

実装の手順と方法

手順と方法

コードの詳細の前に、実装の手順と方法について解説していきます。

HTMLを記述

まずは、HTMLを記述します。

設置したい場所に記述しましょう。

<div class="csvFileWrapper">
<input type="file" id="csvFile" accept=".csv">
</div>
<button onclick="generateTable()">テーブルを生成</button>
<div id="output"></div>
JavaScriptを記述

次に、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を記述

最後に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をインポートしてテーブルで表示するコードについての解説でした。

コード自体も少なく、カスタマイズもしやすいので是非参考にしてみてください。

UI

  • 他のウィンドウが開くことができないポップアップのUIです。

    モーダル

    モーダル

  • 並列な関係を持つ情報を1つずつ格納するUIです。

    タブ

    タブ

  • サイドから全体を覆うほど大きいメニュー表示するUIです。

    ドロワー

    ドロワー

  • 画像などのコンテンツをスライド表示させるUIです。

    スライダー

    スライダー

  • スクロールで表示が変化するスニペットです。

    スクロール

    スクロール

  • クリックすると隠れていた部分が開閉するUIです。

    アコーディオン

    アコーディオン

  • ページのhタグを取得して目次を生成するスニペットです。

    目次

    目次

  • ページの読み込み時にアニメーションをするスニペットです。

    ローディングアニメーション

    ローディングアニメーション

  • マウスオーバーした際に表示される補足説明です。

    ツールチップ

    ツールチップ

  • ページ内上部にあるナビゲーションUIです。

    ヘッダー

    ヘッダー

  • 行と列の組み合わせでできているUIです。

    テーブル

    テーブル

  • データを表やグラフで可視化して見せるUIです。

    グラフ

    グラフ

  • 背景をアニメーションで動かすスニペットです。

    背景

    背景

  • 短いテキスト情報をスクロール表示するUIです。

    ニュースティッカー

    ニュースティッカー

フォーム

  • ラジオボタン、チェックボックス、ドロップダウンリストなどを通じて、ユーザーが入力できるUIです。

    フォーム

    フォーム

文字

  • 文字列をJavaScriptで装飾・動きをつけるスニペットです。

    文字の装飾

    文字の装飾

  • 文字列の操作をして、置換・変更を行うスニペットです。

    文字の操作

    文字の操作

  • 文字列をカウントして表示などを行うスニペットです。

    文字のカウント

    文字のカウント

  • 数字の要素を取得して、変更するスニペットです。

    数字の操作

    数字の操作

ウィンドウ

classの操作

  • 要素を取得して、classを追加・削除するスニペットです。

    classの操作

    classの操作

要素の操作

API

  • WordPressのAPIを取得して表示するスニペットです。

    WP REST API

    WP REST API

  • Google Books APIsで書籍の情報を表示するスニペットです。

    Google Books APIs

    Google Books APIs

  • 楽天市場のAPIを取得して表示するスニペットです。

    楽天市場API

    楽天市場API

  • openBDのAPIを取得して表示するスニペットです。

    openBD

    openBD

画像・動画

  • 画像を取得して、アニメーションなどの変化を加えるスニペットです。

    画像の操作

    画像の操作

  • YouTubeの動画を表示するスニペットです。

    YouTube

    YouTube

リンク

  • ページ内のリンクを取得して変更・操作するスニペットです。

    リンク

    リンク

  • Google Analyticsとの連携をするスニペットです。

    Google Analytics

    Google Analytics

cookie

  • ブラウザのcookieを利用するスニペットです。

    cookie

    cookie

検索

  • 指定した要素の中から検索を行うスニペットです。

    検索

    検索