5

Django アプリケーション内で、SlickGrid を使用して XHR データをクライアント側のスプレッドシートにバインドしています。

 var grid;
 var review_url = '/api/reviews/?t=' + current_tcode;
 $.getJSON(review_url, function(data) {
   grid = new Slick.Grid("#myGrid", data, columns, options);
 });

また、データを CSV ファイルとしてダウンロードするオプションをユーザーに提供したいと思います。これを行うための最良のアプローチは何ですか?

  1. 自分でレンダリングした CSV ファイルにリンクするだけです (API に既に使用している Piston を使用)。
  2. クライアント側で CSV データを出力するために SlickGrid を使用して巧妙なことを行います。
  3. 他の何か。

SlickGrid は、CSV を出力する機能が組み込まれている可能性があるほど十分な機能を備えているように感じますが、クイック検索では何も見つかりません。

4

4 に答える 4

4

CSV にエクスポートするには、次の関数を使用できます。

$("#exporticon").click(function() {
    var processRow = function (row) {
        var finalVal = '';
        for (var j = 0; j < row.length; j++) {
            var innerValue = row[j] === null ? '' : row[j].toString();
            if (row[j] instanceof Date) {
                innerValue = row[j].toLocaleString();
            };
            var result = innerValue.replace(/"/g, '""');
            if (result.search(/("|,|;|\n)/g) >= 0)
                result = '"' + result + '"';
            if (j > 0)
                finalVal += ',';
                finalVal += result;
        }
        return finalVal + '\n';
    };

    var csvFile = '';
    var rows = [];
    var colname = [];
    for (var j = 0, len = grid.getColumns().length; j < len; j++) {
        colname.push(grid.getColumns()[j].name);
    }
    rows.push(colname);
    var singlerow = [];
    for (var i = 0, l = dataView.getLength(); i < l; i++) {
        for (var j = 0, len = grid.getColumns().length; j < len; j++) {
            singlerow.push(grid.getDataItem(i)[grid.getColumns()[j].field]);
        }
        rows.push(singlerow);
        singlerow = [];
    }

    for (var i = 0; i < rows.length; i++) {
        csvFile += processRow(rows[i]);
    }

    var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, "filename.csv");
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", "filename.csv");
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
});
于 2015-07-15T05:43:55.150 に答える
3

これを見たいと思うかもしれません: CellExternalCopyManager は、MS Excel (または互換) との間でデータをコピー/貼り付けするための SlickGrid プラグインです。

于 2012-07-17T02:19:18.207 に答える
2

SlickGrid は純粋に視覚化のためのコンポーネントです。データをフィードすると、グリッドとしてユーザーに表示されます。データを並べ替えるほどスマートではありません。

そのため、データを変換する機能はありません。したがって、グリッド データを CSV 形式で取得する場合は、次の 2 つのオプションがあります。

dataオプション 1. 基になる配列から直接生成することにより、CSV クライアント側をレンダリングします。既に json 形式でデータを返しているので、このようなものでこれをかなり簡単に行うことができるはずです。

-また-

オプション 2. CSV サーバー側をレンダリングし、url 経由でアクセスできるようにしますreview_url

ここで役立つグリッドの機能はわかりませんが、誰かが私を修正してくれるかもしれません。

于 2012-07-16T12:05:36.320 に答える
0

私の意見では、CSVのみが必要な場合は、サーバー上でレンダリングします。
また、このrailscastsのエピソードは興味深いと思うかもしれません。これを行うには、Djangoに適したツールだけを見つけてください。

于 2012-07-16T11:33:47.100 に答える