Download a table as CSV using jQuery
Mon, 07 January 2019
tableDownload.js
(function($) {
$.fn.tableDownload = function(file_name) {
if (typeof file_name === 'undefined') {
file_name = 'tableDownload.csv';
}
if (file_name.substr(-4, 4) !== '.csv') {
file_name += '.csv'
}
var tableCellClean = function(val) {
var s = '';
for (var i=0;i<val.length;i++) {
if (val[i] == '"') {
s += '""';
} else {
s += val[i];
}
}
return s;
};
var table_selector = this.attr('data-target');
var trs = $('tr', $(table_selector));
var data = [];
for (var tri=0;tri<trs.length;tri++) {
var ths = $('th', $(trs[tri]));
var tds = $('td', $(trs[tri]));
var row = [];
for (var cith=0;cith<ths.length;cith++) {
var thText = tableCellClean($(ths[cith]).text().trim());
row.push('"' + thText + '"');
}
for (var citd=0;citd<tds.length;citd++) {
var tdText = tableCellClean($(tds[citd]).text().trim());
row.push('"' + tdText + '"');
}
data.push(row);
}
var csv = "data:text/csv;charset=utf-8,";
data.forEach(function(rowArray){
var row = rowArray.join(",");
csv += row + "\r\n";
});
var encodedUri = encodeURI(csv);
this.attr('href', encodedUri).attr('download', file_name);
return this;
};
}(jQuery));
Example.html
<html>
<head>
<script src="/path/to/jquery-3.3.1.min.js"></script>
</head>
<body>
<a href="#" data-target="#my_table">Download</a>
<table id="my_table">
<thead>
<tr>
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1, Cell 1</td>
<td>Row 1, Cell 2</td>
<td>Row 1, Cell 3</td>
</tr>
<tr>
<td>Row 2, Cell 1</td>
<td>Row 2, Cell 2</td>
<td>Row 2, Cell 3</td>
</tr>
</tbody>
</table>
<script>
$('#download').tableDownload('my-table-data.csv');
</script>
</body>
</html>
my-table-data.csv
"Header 1","Header 2","Header 3" "Row 1, Cell 1","Row 1, Cell 2","Row 1, Cell 3" "Row 2, Cell 1","Row 2, Cell 2","Row 2, Cell 3"