Web端末jsがcsvファイルをエクスポートする(aタグを使用する)

3946 ワード

前言
ファイルをエクスポートするには、一番多くの方法を使いますか?それともサーバー側で処理しますか?例えば、jspではレスポンスを使う方式です.
しかし、webの先端を使いたいと思ってもページの内容を導き出すことができますか?たとえば、ページの表をエクスポートします.
この需要には必ず答えがあります.各ブラウザに対して処理はちょっと違っています.(主にIEと他のブラウザの違いです).
IEでActiveXObjectを使って実現し、firefoxとChromeで使用します.  aタグ(またはjs)で実現できます.ここでは主に他のブラウザでの実装について説明します.
aラベルでの実装
直接例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="author" content="oscar999">
  <title></title>
  </head>
  <body>
    <a id="test" download="downlaod.txt" href="data:text/txt;charset=utf-8,download Test Data">download</a>
  </body>
</html>
に説明してください.
1.ダウンロードしたファイル名をdownloadで設定します.
2.hrefにdataを加える:text/txt;charset=utf-8  linkをクリックしてファイルをダウンロードします.エンコードはutf-8です.このコンマの後はファイルに保存されている内容です.
複数行、複数列でcsvファイルをエクスポートします.
csvファイルはExcelで開けてもいいです.テーブルをエクスポートするなら、Excelを使うと便利です.
問題はどのように支店、分列しますか?
理論上:分列使用、番号分割、支店用.
以上のようにしてもいいです.列を分けることができますが、改行しません.見たところ知らないようです.
解決策はエンコーディング/
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="author" content="oscar999">
  <title>
  </title>
  <script>
    function clickDownload(aLink)
    {
         var str = "col1,col2,col3
value1,value2,value3"; str = encodeURIComponent(str); aLink.href = "data:text/csv;charset=utf-8,"+str; aLink.click(); } </script> </head> <body> <a id="test" onclick="clickDownload(this)" download="downlaod.csv" href="#">download</a> </body> </html>
中国語の問題があるcsvをエクスポートします.
以上は全部utf-8符号を使っています.中国語を理論的にエクスポートするのは問題ではないはずです.
ただし、csv形式をエクスポートすると、Excelを使って開けば、中国語は文字化けですが、他のテキストプログラムで開くのは正常です.
原因はBOMヘッドが一つ足りないからです. \ufeff
加えてすべて正常になりました.
   <head>
  <meta http-equiv="content-type" content="text/html; charset=gb2312">
  <meta name="author" content="oscar999">
  <title>
  </title>
  <script>
    function clickDownload(aLink)
    {
         var str = "  1,  2,  3
1, 2, 3";          str =  encodeURIComponent(str);          aLink.href = "data:text/csv;charset=utf-8,\ufeff"+str;          aLink.click();     }   </script>   </head>   <body>     <a id="test" onclick="clickDownload(this)" download="downlaod.csv" href="#">download</a>       </body> </html>
ここに二つの変化があります.
1.ページのcharsetはgb 2312に設定する必要があります.
2.加えて\u feff BOMヘッド
Chromeダウンロードのファイル名
以上はaのdownload属性を使ってダウンロードのファイル名と拡張子を指定できます.しかし、Chromeが実行すると、Chromeがこれを無視していることが分かります.
ダウンロード名は「ダウンロード」または「ダウンロード」です.
インターネットで検索してみます.Chromeというbugがあります.
stackoverflowの2つの記事を参照してください.
http://stackoverflow.com/questions/23962284/download-attribute-on-a-tag-doesnt-work-in-chromehttp://stackoverflow.com/questions/23816005/anchor-tag-download-atribute-not-working-bug-inn-chrome-35-0-1916-114
以上の二つの文章は気にしなくてもいいです.この問題が解決できるかどうか、解決方法は何ですか?
ソリューションを直接貼り付ける:
							 var blob = new Blob([data], { type: 'text/csv' }); //new way
							 var csvUrl = URL.createObjectURL(blob);
							 document.getElementById("mylink").href = csvUrl; 
BlobとURLを使ってパッケージ化と変換します.問題は解決します.
ここで中国語の問題に会ったら、上の処理方法と同じです.
1.ページのcharsetはgb 2312(UTF-8に設定しても良い)に設定する必要があります.
具体的なコードは類似しています.
data = "\ufeff"+data;
var blob = new Blob([data], { type: 'text/csv,charset=UTF-8'});