designsupply.llc
  • aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. JavaScriptで外部のCSVファイルを読み込んでデータをHTML上に展開する

JavaScriptで外部のCSVファイルを読み込んでデータをHTML上に展開する

  • 2019.10.10
  • プログラミング
  • JavaScript
Updated: 2020.02.15
先日クライアントワークで、CSVで管理しているデータをサイト上に表示させたいというような要件があり、いろいろ調べてみるとJavaScriptで出来そうという情報が見つかったので試してみました。CSVとは半角コンマで区切られた値のことで、詳しくはこちらの記事「データ分析や登録などで使用するCSVファイルを扱う時の注意点まとめ」でもまとめていますのでご参考に。   今回は、外部ファイルとして別のディレクトリにあるCSVファイルをHTTPで読み込み、その値をHTML上で確認できるように表組みでまとめていきます。ここではサンプルとしてこのようなデータのCSVファイルを使っています。 【CSV】
名前,性別,年齢,血液型,趣味
山田,男性,35,A,ドライブ
田中,女性,29,B,読書
中村,男性,47,AB,ゴルフ
村本,女性,38,O,料理
  この値がそのまま表組みで表示されるようなイメージですね。フロントエンドでデータを取扱う際には、一般的にはJSON形式が多いかと思いますが、CSVでは文字列として扱うので、データを加工するために少し手間をかける必要があります。それでは早速コードを見ていきます。 (参考記事) 「fetch APIで外部のJSONデータを取得する」 「外部のJSONデータをjQueryを使ってHTMLへ出力する」  
XMLHttpRequestで外部CSVデータを読み込む
まずは外部のCSVデータを読み込むところから見ていきます。確認用として値の出力先に適当なHTML要素を作成しておきます。そしてCSVを読み込む処理を書いていきます。CSVを読み込むのにHTTP通信で行いますが、今回は、XMLHttpRequest()を使います。XMLHttpRequestのイベントハンドラである、「open()」の第一引数にはHTTPのリクエストメソッドのGETを指定し、第二引数には送信するソースファイルのURLを指定します。第三引数は「true」を指定すると非同期通信とすることができます。続けて「send()」でリクエストを送信します。 【HTML】※一部抜粋
<div id="output_csv"></div>
  【javascript】
const outputElement = document.getElementById('output_csv');

function getCsvData(dataPath) {
 const request = new XMLHttpRequest();
 request.addEventListener('load', (event) => {
  const response = event.target.responseText;
  outputElement.innerHTML = response;
 });
 request.open('GET', dataPath, true);
 request.send();
}

getCsvData('./example.csv');
  リクエストがロードされた時に、「responseText」でレスポンスの中身である文字列を返すようにします。この中にはCSVのデータが文字列として含まれています。これら一連の処理を関数として定義しておきます。ここでは引数にCSVファイルのパスを指定できるようにしています。   この処理を実際にブラウザで確認してみます。HTML上にはCSVのデータが文字列として出力され、コンソールでもCSVの値が確認することができます。ちなみにXMLHttpRequestでHTTP通信を行う場合には、ローカルファイルですとクロスオリジンの制約でエラーとなりますので、localhostを起動したり、ウェブサーバー上で確認するようにします。 JavaScriptで外部のCSVファイルを読み込んでデータをHTML上に展開する    
CSVの文字列から配列に変換
先ほどのコードでCSVデータを取得できましたが、データとしては1つの文字列となっているので、データを加工する場合にはいろいろと不便です。そこでCSVデータを文字列から配列に変換していきます。ここでは配列変換用に新たな関数を定義し、先ほどの関数内で呼び出すようにしていきます。 【javascript】
const outputElement = document.getElementById('output_csv');

function getCsvData(dataPath) {
 const request = new XMLHttpRequest();
 request.addEventListener('load', (event) => {
  const response = event.target.responseText;
  convertArray(response);
 });
 request.open('GET', dataPath, true);
 request.send();
}

function convertArray(data) {
 const dataArray = [];
 const dataString = data.split('n');
 for (let i = 0; i < dataString.length; i++) {
  dataArray[i] = dataString[i].split(',');
 }
 outputElement.innerHTML = dataArray;
}

getCsvData('./example.csv');
  文字列を配列に変換する関数では、まず空の配列を用意していき、その中に値を入れていることで配列に変えていきます。今は1つの文字列となっていますので、まずは改行文字である「n」で分割します。これがCSVでの表組みの行単位になります。そして各行ごとに、カンマごとにデータをバラバラにしていき、1つづつ配列に代入していきます。これで配列データが出来上がります。ブラウザ上に出してみると、見た目は文字列と変わりませんが、コンソールではきちんと配列型のデータになっているのが確認できます。 JavaScriptで外部のCSVファイルを読み込んでデータをHTML上に展開する    
CSVデータを表組みでHTML上に出力
データが配列になったので、あとは値に対してHTMLとして出力する処理を繰り返していきます。過去記事「JavaScriptで配列を扱う時によく使うメソッド#2【配列データに対して繰り返し処理を行う】」でまとめています「forEach()」メソッドを使います。今回は表組みでの出力を行いますので、HTML側にtable要素を用意しておき、trとtdタグで囲まれる形で出力していきます。入れ子になっているのは1つ目のループで行単位の処理を行い、2つ目で値ごとの処理をしている形になります。 【HTML】※一部抜粋
<table>
 <tbody id="output_csv"></tbody>
</table>
  【javascript】
const outputElement = document.getElementById('output_csv');

function getCsvData(dataPath) {
 const request = new XMLHttpRequest();
 request.addEventListener('load', (event) => {
  const response = event.target.responseText;
  convertArray(response);
 });
 request.open('GET', dataPath, true);
 request.send();
}

function convertArray(data) {
 const dataArray = [];
 const dataString = data.split('n');
 for (let i = 0; i < dataString.length; i++) {
  dataArray[i] = dataString[i].split(',');
 }
 let insertElement = '';
 dataArray.forEach((element) => {
  insertElement += '<tr>';
  element.forEach((childElement) => {
   insertElement += `<td>${childElement}</td>`
  });
  insertElement += '</tr>';
 });
 outputElement.innerHTML = insertElement;
}

getCsvData('./example.csv');
  ブラウザで確認してみると、このような形でエクセルなどの表計算ソフトと同じような表組みで表示されているのが確認できます。HTMLタグも出力されているのがわかります。 JavaScriptで外部のCSVファイルを読み込んでデータをHTML上に展開する  
  今回は外部のCSVデータを読み込んで、値をHTML上に展開していく方法をまとめました。JSON形式とは異なり、CSVの場合にはエクセルなどの表計算ソフトで管理できますので、クライアントさんにとっては扱いやすいのかもしれません。ただし、JavaScriptで処理する場合には少し手間になるので、ぜひ覚えておきたいですね。   (参考にさせて頂いたサイト) JavaScriptでCSVファイルを読み込む方法  

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト
  • クリエイティブ支援
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact