Skip to content

Instantly share code, notes, and snippets.

@C-Rodg
Created January 11, 2017 19:28
Show Gist options
  • Save C-Rodg/09b1cf2fb0f2421aa0c8eb99aabf6703 to your computer and use it in GitHub Desktop.
Save C-Rodg/09b1cf2fb0f2421aa0c8eb99aabf6703 to your computer and use it in GitHub Desktop.
A more full featured csv writer class for generating csv strings, downloading a csv, etc. Cleans out many invalid csv characters.
function csvWriter(del, enc) {
this.del = del || ',';
this.enc = enc || '"';
this.escapeCol = (col) => {
if(isNaN(col)) {
if(!col) {
col = '';
} else {
col = String(col);
if(col.length > 0) {
// Use regex to check for \n ??
col = col.split(this.enc).join(this.enc + this.enc);
col = this.enc + col + this.enc;
}
}
}
return col;
};
this.arrayToRow = (arr) => {
let arr2 = arr.slice(0);
let i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.escapeCol(arr2[i]);
}
return arr2.join(this.del);
};
this.arrayToCSVString = (arr) => {
let arr2 = arr.slice(0);
let i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.arrayToRow(arr2[i]);
}
return arr2.join("\r\n");
};
this.downloadCSV = (arr) => {
let csvContent = this.arrayToCSVString(arr);
csvContent = "data:text/csv;charset=utf-8," + csvContent;
let encoded = encodeURI(csvContent);
let link = document.createElement('a');
link.setAttribute('href', encoded);
link.setAttribute('download', 'my_csv.csv');
document.body.appendChild(link);
link.click();
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment