Skip to content

Instantly share code, notes, and snippets.

@ceelsoin
Last active February 20, 2020 20:05
Show Gist options
  • Save ceelsoin/33ac1debae5b1548b61da60cd1589f3f to your computer and use it in GitHub Desktop.
Save ceelsoin/33ac1debae5b1548b61da60cd1589f3f to your computer and use it in GitHub Desktop.
Typescript generate and download csv by object
public convertArrayOfObjectsToCSV(args) {
var result, ctr, keys, columnDelimiter, lineDelimiter, data;
var filter = args.filter || [""]; //default fields to exclude
data = args.data || null;
if (data == null || !data.length) {
return null;
}
columnDelimiter = args.columnDelimiter || ';';
lineDelimiter = args.lineDelimiter || '\n';
keys = Object.keys(data[0]);
result = '';
keys.forEach(function (key) {
// console.log(key)
// console.log(typeof data[0][key])
console.log(data[0][key])
console.log(typeof data[0][key])
if (typeof data[0][key] == "object" && data[0][key]) {
console.log(data[0][key])
let subitemshead = Object.keys(data[0][key]);
subitemshead.map(subitemhead => {
console.log(subitemhead)
result += subitemhead.toUpperCase() + "" + columnDelimiter
});
}else{
if (!filter.includes(key)) {
result += key.toUpperCase() + "" + columnDelimiter;
}
}
// console.log(key)
});
// result += keys.join(columnDelimiter);
result += lineDelimiter;
data.forEach(function (item) {
ctr = 0;
keys.forEach(function (key) {
//if (ctr > 0) result += columnDelimiter;
if (!filter.includes(key)) {
if (item[key] != null) {
if (typeof item[key] == "object") {
if (item[key].length != 0) {
// console.log(item[key])
let subitems = Object.keys(item[key]);
// console.log(typeof subitems)
// console.log(subitems)
subitems.map((subitem: any) => {
let subitemValue = item[key][subitem];
if (subitemValue)
// console.log(subitemValue)
result += subitemValue
result = result.toUpperCase();
result += columnDelimiter;
})
}
} else {
var a = item[key].toString();
result += a.toUpperCase();
result += columnDelimiter;
}
} else {
result += " ";
result += columnDelimiter;
}
}
ctr++;
});
result += lineDelimiter;
});
return result;
}
public downloadCSV(args) {
var data, filename, link;
var csv = this.convertArrayOfObjectsToCSV({
data: args.data
});
if (csv == null) return;
filename = args.filename || 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);
link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
link.click();
}
//Call function object, filename
this.downloadCSV({data: yourArrayWithObjS, filename: "your_filename.csv"});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment