現在HTMLにCSVのデータを持って行って表にしたいと考えてます。
Ajax関数を使ってしまうと使用環境がクローム固定にしたいため、セキュリティの都合ではじかれてしまいます。
FILEAPIを使ってテキスト形式でデータを持っていくことはできたのですがこれでは、配列にも格納されていないので表で表現ができません。
いろいろとしらべては見たのですが打開策がみつかりません。
どなたかご教授お願いします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
以下の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総合スコア1693
0
新しいコードを別書き込みしました。
投稿2015/12/17 05:48
編集2015/12/17 13:28総合スコア1693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/17 06:17
2015/12/17 06:26
2015/12/17 06:27
2015/12/17 11:36 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/17 13:33