2025年3月30日日曜日

CSVファイルを読み込み、HTMLテーブルに表示

 はい、jQueryを使ってAjaxでCSVファイルを読み込み、HTMLテーブルに表示するコードを以下に示します。

HTML (index.html):

HTML
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>CSVファイル表示</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script src="script.js"></script>
    <style>
        table {
            border-collapse: collapse;
            width: 80%;
            margin: 20px auto;
        }
        th, td {
            border: 1px solid black;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <h1>CSVファイル表示</h1>
    <input type="file" id="csvFile">
    <div id="tableContainer"></div>
</body>
</html>

JavaScript (script.js):

JavaScript
$(document).ready(function() {
    $('#csvFile').change(function(e) {
        const file = e.target.files[0];
        if (file) {
            const reader = new FileReader();
            reader.onload = function(event) {
                const csvData = event.target.result;
                const lines = csvData.split('\n').map(line => line.trim()); // 各行をトリム
                if (lines.length > 0 && lines[0] !== "") { // 空行でないことを確認
                    const table = $('<table id="csvTable"></table>');
                    $('#tableContainer').empty().append(table);

                    const headers = lines[0].split(',');
                    const thead = $('<thead><tr></tr></thead>').appendTo(table);
                    headers.forEach(header => {
                        $('<th></th>').text(header).appendTo(thead.find('tr'));
                    });

                    const tbody = $('<tbody></tbody>').appendTo(table);
                    for (let i = 1; i < lines.length; i++) {
                        if (lines[i] !== "") { // 空行でないことを確認
                            const rowData = lines[i].split(',');
                            const row = $('<tr></tr>').appendTo(tbody);
                            rowData.forEach(cellData => {
                                $('<td></td>').text(cellData).appendTo(row);
                            });
                        }
                    }
                } else {
                    $('#tableContainer').html('<p>CSVファイルが空です。</p>');
                }
            };
            reader.onerror = function() {
                $('#tableContainer').html('<p>CSVファイルの読み込みに失敗しました。</p>');
            };
            reader.readAsText(file, 'Shift-JIS'); // CSVファイルのエンコーディングに合わせて変更
        } else {
            $('#tableContainer').empty();
        }
    });
});

簡単な説明:

  1. HTML (index.html):

    • jQueryライブラリをCDNから読み込んでいます。
    • script.jsファイルを読み込んでいます。
    • <input type="file" id="csvFile"> はCSVファイルを選択するためのファイル選択要素です。
    • <div id="tableContainer"></div> は生成されたHTMLテーブルを表示するためのコンテナです。
    • 簡単なCSSでテーブルのスタイルを定義しています。
  2. JavaScript (script.js):

    • $(document).ready() は、DOMが完全に読み込まれてからJavaScriptコードを実行するためのものです。
    • $('#csvFile').change() は、ファイル選択要素の内容が変更されたときに実行されるイベントハンドラーです。
    • e.target.files[0] で選択されたファイルオブジェクトを取得します。
    • FileReader オブジェクトを使ってファイルの内容を非同期で読み込みます。
    • reader.onload は、ファイルの読み込みが成功したときに実行される関数です。
      • event.target.result にCSVファイルの内容が文字列として格納されています。
      • csvData.split('\n') でCSVデータを改行で分割し、各行を配列の要素とします。.map(line => line.trim()) で各行の先頭と末尾の空白を削除します。
      • 最初の行をヘッダー行として処理し、テーブルの<thead><th>要素を作成します。
      • 残りの行をデータ行として処理し、テーブルの<tbody><tr>要素と<td>要素を作成します。
      • 生成した<table>要素を#tableContainerの中に追加します。.empty() で既存の内容をクリアします。
      • 空行の場合はメッセージを表示します。
    • reader.onerror は、ファイルの読み込みに失敗したときに実行される関数です。エラーメッセージを表示します。
    • reader.readAsText(file, 'Shift-JIS') でファイルの内容をテキストとして読み込みます。重要: CSVファイルのエンコーディングに合わせて 'Shift-JIS' の部分を適切なエンコーディング(例: 'UTF-8')に変更してください。
    • ファイルが選択されなかった場合は、#tableContainer の内容をクリアします。

使い方:

  1. 上記のHTMLファイル (index.html) と JavaScriptファイル (script.js) を同じディレクトリに保存します。
  2. Webブラウザで index.html を開きます。
  3. 「ファイルを選択」ボタンをクリックし、読み込みたいCSVファイルを選択します。
  4. CSVファイルの内容がHTMLテーブルとしてページに表示されます。

注意点:

  • CSVファイルのエンコーディング: 上記のコードでは reader.readAsText(file, 'Shift-JIS') としていますが、CSVファイルのエンコーディングはファイルによって異なります。一般的なエンコーディングとしては UTF-8Shift-JISEUC-JP などがあります。読み込むCSVファイルのエンコーディングに合わせて、この部分を修正してください。 間違ったエンコーディングを指定すると、文字化けが発生する可能性があります。
  • CSVの区切り文字: 上記のコードではカンマ (,) を区切り文字としていますが、タブ (\t) など他の区切り文字が使われている場合は、split(',') の部分を соответствующий 区切り文字に変更してください。
  • エラーハンドリング: 簡単なエラーハンドリングは実装していますが、より堅牢なアプリケーションにするためには、ファイル形式のバリデーションや、より詳細なエラーメッセージの表示などを追加することを検討してください。
  • 大きなファイル: 非常に大きなCSVファイルを読み込む場合は、ブラウザのパフォーマンスに影響を与える可能性があります。そのような場合は、サーバーサイドで処理を行い、必要なデータだけをクライアントに送信する方式を検討してください。

0 件のコメント:

コメントを投稿