Last active
February 20, 2020 20:05
-
-
Save ceelsoin/33ac1debae5b1548b61da60cd1589f3f to your computer and use it in GitHub Desktop.
Typescript generate and download csv by object
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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