質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

5565閲覧

FileAPIを使ってCSVを表にしたい

yzccdefine

総合スコア65

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

2クリップ

投稿2015/12/17 04:14

現在HTMLにCSVのデータを持って行って表にしたいと考えてます。

Ajax関数を使ってしまうと使用環境がクローム固定にしたいため、セキュリティの都合ではじかれてしまいます。

FILEAPIを使ってテキスト形式でデータを持っていくことはできたのですがこれでは、配列にも格納されていないので表で表現ができません。

いろいろとしらべては見たのですが打開策がみつかりません。

どなたかご教授お願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

utf-8 csv を utf-8 で読んで成功した図
↑utf-8 csv を utf-8 で読んで成功した図

utf-8 csv を sjis で読むと文字化けする図
↑utf-8 csv を sjis で読むと文字化けする図

以下のHTMLを test.html で保存。文字コードは、utf-8
data.csv を作成し、shift-jis で保存。

html

1<!-- 2このスクリプトは、Mac/Google Chrome でテストしました。 3このスクリプトを記述するため、エディタは、Mac 用 ATOM 4エディタを使いました。そのため、csv ファイル保存時の文字コード 5が utf-8 で保存されてしまったため、encoding を外から変更できる 6ように修正しました。 7windows の場合は、shift-jis 一択です。 8Mac 用エクセルとか持ってないので未検証ですが、csv ファイルの文字コード 9はおそらく、 shift-jis 固定の方がいいんじゃないかな??わかりません。 10 11あとひとつ、resultId にメソッドを指定することで、CSVから作成するテーブル 12を任意のものに変更できるようにしてあります。自分が作成したテーブルで納得 13いかない場合は適宜変更してください。 14 15改行コードの件ですが、なぜ置換できないのか深く追求しません。 16windows-IE11, Firefox44 では、split(/¥r¥n|¥r|¥n/) で改行コード 17で分割できています。Mac やら他の環境でなんでできないのか謎としておきます。 18 19--> 20<script src="jquery.js"></script> 21<meta charset="utf-8" /> 22<script> 23function readCsv2Table(filepath, encoding, resultId) { 24 var reader = new FileReader(); 25 reader.onload = function(e) { 26 var heads = []; 27 var bodys = []; 28 29 var splitLines = []; // 30 31 // 改行コードがなんで、¥r¥n じゃ置換できないのかわかりまっせーん。 32 $(escape(e.target.result).split(/%0D%0A|%0D|%0A/ig)).each(function(y, line) { 33 if (line == "") return; 34 splitLines.push(unescape(line)); 35 }); 36 37 // 文字列ではなくて、メソッド指定なら、引数にCSVデータセットして 38 // 呼び出す。 39 if (typeof resultId === "function") { 40 resultId.apply(null, [splitLines]); 41 return ; 42 } 43 44 $(splitLines).each(function(y, line) { 45 console.log("line:" + line); 46 47 var columns = $(line.split(/,/)); 48 if (y == 0) { 49 heads.push("<tr>"); 50 columns.each(function(x, o) { 51 heads.push("<th>" + this + "</th>"); 52 }); 53 heads.push("</tr>"); 54 } else { 55 bodys.push("<tr>"); 56 columns.each(function(x,o) { 57 bodys.push("<td>" + this + "</td>"); 58 }); 59 bodys.push("</tr>"); 60 } 61 }); 62 heads.unshift("<thead>"); // 配列の先頭に挿入 63 heads.push("</thead>"); // 配列の末尾に追加 64 bodys.unshift("<tbody>"); 65 bodys.push("</tbody>"); 66 67 $("#" + resultId).html("<table>" + 68 heads.join("") + bodys.join("") + "</table>"); 69 70 }; // end of onload descriptions. 71 // execute read file. 72 reader.readAsText(filepath, encoding); //shift-jis 73} 74$(function() { 75 76 $("#myButton").click(function(e) { 77 var filePath = document.getElementById("myFile").files[0]; 78 if (typeof filePath === "object") { 79/* 80 readCsv2Table(filePath, "utf-8", function(arr) { 81 $(arr).each(function(i,o) { 82 console.log("[" + i + "]=>" + o); 83 }); 84 }); 85*/ 86 readCsv2Table(filePath, "shift-jis", "result"); 87 } 88 }); 89 90}); 91</script> 92<style> 93fieldset#result > table { 94 border-collapse: collapse; 95 border: solid 1px black; 96 97} 98fieldset#result > table thead tr th { 99 min-width: 150px; 100 background-color: #CCC; 101 border-collapse: collapse; 102 border: solid 1px black; 103} 104fieldset#result > table tbody tr td { 105 min-width: 150px; 106 border-collapse: collapse; 107 border: solid 1px black; 108} 109</style> 110<form id="myForm"> 111 <input type="file" id="myFile" /> 112 <input type="button" id="myButton" value="CSV読み込み" /> 113</form> 114<fieldset id="result"> 115 <legend>CSV読み込み結果</legend> 116</fieldset> 117 118 119

csv

1no,name,detail 21,みかん,温州みかん 32,りんご,青森のりんご 43,ばなな,はわいのばなな 5 6

以上です、コピペして、このファイルと同じ場所に、data.csv と jquery.js を配置してください。
正規表現が微妙にプロ仕様じゃないので、気になるなら納得いくまで追求してください。
自分はできればいいのでこれでOK です。

投稿2015/12/17 13:27

編集2015/12/17 13:33
ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yzccdefine

2015/12/17 13:33

ありがとうございます!! ここまでしていただけてうれしいです。 今からソースコード使わせて頂きます! 本当にありがとうございます^^
guest

0

新しいコードを別書き込みしました。

投稿2015/12/17 05:48

編集2015/12/17 13:28
ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ipadcaron

2015/12/17 05:55

split に指定してるかいぎょうコードは、 左から順に、windows/ms-dos , 旧mac, 最近のmac/linux/unix です。 エクセルがこの3形式の行末を持つcsvをよめるので、それと同じにしました。
yzccdefine

2015/12/17 06:17

Uncaught TypeError: Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'. ありがとうございます! 今埋めてみたのですがfilepath には自分の読み込みたいcsv名 idはresultでつくってみたのですが上記のようなエラーがきました。 第一引数が間違ってるとのことなのですが クリック処理は以下のようだとまずいのでしょうか? <INPUT onclick="readCsv2Table('list.csv');" value="ファイル読み込み" type="button">
ipadcaron

2015/12/17 06:26

あぁ、そこからなんですね、今日の夜回答します。
yzccdefine

2015/12/17 06:27

すみませんお手数かけます;
yzccdefine

2015/12/17 11:36 編集

<th></tr>を<th></th>にしましたーそれ以外は変更してないです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問