132 lines
3.3 KiB
TypeScript
132 lines
3.3 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) {
|
||
|
console.info("convertArrayOfObjectsToCSV");
|
||
|
|
||
|
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) {
|
||
|
console.info("downloadCSV");
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
}
|