openaire-library/utils/exportCSV.class.ts

130 lines
3.2 KiB
TypeScript

export class ExportCSVComponent {
stockData : any =
{
"columnNames":
["Symbol", "Company", "Price"],
"export":
/*
[
{
Symbol: "AAPL",
Company: "Apple Inc.",
Price: "132.54"
},
{
Symbol: "INTC",
Company: "Intel Corporation",
Price: "33.45"
},
{
Symbol: "GOOG",
Company: "Google Inc",
Price: "554.52"
},
],
*/
[
[
"AAPL",
"Apple Inc.",
"132.54"
],
[
"INTC",
"Intel Corporation",
"33.45"
],
[
"GOOG",
"Google Inc",
"554.52"
],
],
"columnDelimiter": ',',
"lineDelimiter": '\n'
};
data: any = this.stockData;
filename: string;
linkname: string = "Download CSV";
constructor () {
}
ngOnInit() {
}
public static convertArrayOfObjectsToCSV(args) {
var result, ctr, keys, columnDelimiter, lineDelimiter, data;
data = args.export || null;
if (data == null || !data.length) {
return null;
}
columnDelimiter = args.columnDelimiter || ',';
lineDelimiter = args.lineDelimiter || '\n';
//keys = Object.keys(data[0]);
keys = args.columnNames;
result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;
/*
data.forEach(function(item) {
ctr = 0;
keys.forEach(function(key) {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
*/
for(let line of data) {
ctr = 0;
for(let column of line) {
if (ctr > 0) result += columnDelimiter;
result += column;
ctr++;
}
result += lineDelimiter;
}
return result;
}
public static downloadCSV(data: any, filenameArg: string) {
var encodedData, filename, link;
var csv = this.convertArrayOfObjectsToCSV(data);
if (csv == null) return;
filename = filenameArg || 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
encodedData = encodeURI(csv);
//link = document.createElement('a');
link = document.getElementsByTagName('a');
link[0].setAttribute('href', encodedData);
link[0].setAttribute('download', filename);
//document.body.appendChild(link);
link[0].click();
//document.body.removeChild(link);
}
}