csvify
Create and download a CSV file from data in the browser.
by chaddotson
HTML
<a id="test" href="#">Download</a>
JavaScript
function csvify(data, defaultValue, padBack) {
var maxColumnLength = 0,
columnNames = Object.keys(data),
transformed = [],
columnName;
for(columnName in data) {
if(data[columnName].length > maxColumnLength) {
maxColumnLength = data[columnName].length;
}
}
transformed.push(columnNames.join(", "));
for(var i = 0; i < maxColumnLength; i++) {
var temp = []
for(var j = 0; j < columnNames.length; j++) {
var columnName = columnNames[j];
if(data[columnName].length < maxColumnLength) {
// column is not the same size as the max.
if(!padBack) {
// array padding at the front
if( i < (maxColumnLength - data[columnName].length)) {
temp.push(defaultValue);
} else {
temp.push(data[columnName][data[columnName].length - maxColumnLength + i]);
}
} else {
// array padding at the back
if( i >= data[columnName].length) {
temp.push(defaultValue);
} else {
temp.push(data[columnName][i]);
}
}
} else {
temp.push(data[columnName][i]);
}
}
transformed.push(temp.join(", "));
}
return transformed.join("\r\n");
}
var data = {
w: [1],
x: [1,2,3,4,5],
y: [6,7,8,9,0],
z: [1,2,3]
};
var transformed = csvify(data, 0, true);
var blob = new Blob([transformed], {type: "text/csv"});
var url = window.URL.createObjectURL(blob);
$("#test").attr("href", url);
$("#test").attr("download", "spreadsheet.csv");