3

アップロードされた csv ファイルからデータテーブルを作成しようとしています。私が直面している唯一の問題は、テーブルの列ヘッダーを定義することです。現在、ヘッダーを手動で定義して、このようにしています。

var table = $('#example').DataTable({
    columns: [{
          "title": "Number",
          "data": "Number"
      }, {
          "title": "Category",
          "data": "Category"
      }, {
          "title": "Assignment group",
          "data": "Assignment group"
      }
      ]

});

Jquery CSVを介してcsvデータを渡す

 var f = event.target.files[0];
if (f) {
    var r = new FileReader();
    r.onload = function(e) {
        console.log("on load function");
        var result = $.csv.toArrays(e.target.result);
        table.rows.add($.csv.toObjects(e.target.result)).draw();
    }
    r.readAsText(f);
} else {
    alert("Failed to load file");
}

これはうまくいっています。csvファイル自体から直接列ヘッダーを定義したい。

試した

 var f = event.target.files[0];
if (f) {
    var r = new FileReader();
    r.onload = function(e) {
        console.log("on load function");
        var result = $.csv.toArrays(e.target.result); // This will give CSV rows
        var csvHeader = result[0]; // This will give first CSV header
        var option;
        $.each( csvHeader, function( value ){
           console.log(value)
           // Now iterate each value to define Datatable column
           option = // Define column  which will create below column definition 

           /* columns: [{
                         "title": "Number",
                         "data": "Number"
                     }, {
                         "title": "Category",
                         "data": "Category"
                     }, {
                         "title": "Assignment group",
                         "data": "Assignment group"
                     }, {
                          "title": "Short description",
                          "data": "Short description"
                      },
                      {
                          "title": "Description",
                          "data": "Description"
                      }
                     ]*/


        });


        var table = $('#example').DataTable({

          //Define datatable passing column definition as option 
        });



        table.rows.add($.csv.toObjects(e.target.result)).draw();
    }
    r.readAsText(f);
} else {
    alert("Failed to load file");
}

前もって感謝します。

4

1 に答える 1

3

FileReader代わりに、$.getまたは類似のものを使用する理由はありますか? FileReaderIE9 や Opera mini など、すべてのブラウザでサポートされているわけではありません。

とにかく - CSV ファイルを読み込んで、テーブルに追加する準備が整った文字列の配列になるので、.xml でdataプロパティを定義する必要はありませんcolumns。実際、 を使用して CSV を表示する dataTable を生成するには、いくつかの非常に簡単な手順を実行するだけ$.csvです。以下のコードは、整形式の CSV を取りそれを dataTable として公開します。

$.get(<CSV FILE>, function(csv) {
    var data = $.csv.toArrays(csv),
        columns = [];

    //create the columns object
    data[0].forEach(function(col) {
        columns.push({ title: col });
    })

    //remove the CSV header row for convenience 
    data.splice(0,1);

    //create the dataTable
    var table = $('#example').DataTable({
        columns: columns
    })

    //insert rows
    data.forEach(function(row) {
        table.row.add(row).draw();
    })

})
于 2016-01-27T12:41:05.967 に答える