从上传的 csv 数据创建数据表列定义

Create dataTable column definition from uploaded csv data

本文关键字:创建 数据表 定义 数据 csv      更新时间:2023-09-26

M 尝试从上传的 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");
}

提前谢谢。

使用FileReader而不是$.get或类似的原因是什么? 并非所有浏览器都支持FileReader,例如IE9和Opera mini。

无论如何 - 由于您读取了 CSV 文件,并最终准备好将字符串数组添加到表中,因此无需在 columns 中定义data属性。实际上,只需几个非常简单的步骤即可生成一个使用$.csv显示CSV的数据表。下面的代码采用任何格式正确的CSV并将其发布为数据表:

$.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();
    })
})