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