LoginSignup
41
45

More than 5 years have passed since last update.

ブラウザからjsの配列をcsvとしてダウンロードする。

Last updated at Posted at 2014-10-03

準備

以下を開発者ツールなどのコンソールで実行。

var downloadCsv = (function() {

    var tableToCsvString = function(table) {
        var str = '\uFEFF';
        for (var i = 0, imax = table.length - 1; i <= imax; ++i) {
            var row = table[i];
            for (var j = 0, jmax = row.length - 1; j <= jmax; ++j) {
                str += '"' + row[j].replace('"', '""') + '"';
                if (j !== jmax) {
                    str += ',';
                }
            }
            str += '\n';
        }
        return str;
    };

    var createDataUriFromString = function(str) {
        return 'data:text/csv,' + encodeURIComponent(str);
    }

    var downloadDataUri = function(uri, filename) {
        var link = document.createElement('a');
        link.download = filename;
        link.href = uri;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    };

    return function(table, filename) {
        if (!filename) {
            filename = 'output.csv';
        }
        var uri = createDataUriFromString(tableToCsvString(table));
        downloadDataUri(uri, filename);
    };

})();

使い方

var table = [['', ''], ['a', 'i']];
downloadCsv(table);

結果

"あ","い"
"a","i"

注意点

  • 文字列をbase64でエンコードするbtoaがマルチバイト対応していないため、日本語の文字列は非対応です。(mpywさんに修正していだきました)
  • 2次元配列以外は考慮していません。
  • IE非対応
41
45
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
45