Project

General

Profile

1

    
2

    
3

    
4
export class ExportCSVComponent {
5
    stockData : any =
6
        {
7
            "columnNames":
8
                ["Symbol", "Company", "Price"],
9
            "export":
10
/*
11
                [
12
                    {
13
                        Symbol: "AAPL",
14
                        Company: "Apple Inc.",
15
                        Price: "132.54"
16
                    },
17
                    {
18
                        Symbol: "INTC",
19
                        Company: "Intel Corporation",
20
                        Price: "33.45"
21
                    },
22
                    {
23
                        Symbol: "GOOG",
24
                        Company: "Google Inc",
25
                        Price: "554.52"
26
                    },
27
                ],
28
*/
29

    
30
                [
31
                    [
32
                        "AAPL",
33
                        "Apple Inc.",
34
                        "132.54"
35
                    ],
36
                    [
37
                        "INTC",
38
                        "Intel Corporation",
39
                        "33.45"
40
                    ],
41
                    [
42
                        "GOOG",
43
                        "Google Inc",
44
                        "554.52"
45
                    ],
46
                ],
47

    
48

    
49
            "columnDelimiter": ',',
50
            "lineDelimiter": '\n'
51
        };
52

    
53
     data: any = this.stockData;
54
     filename: string;
55
     linkname: string = "Download CSV";
56

    
57
    constructor () {
58
    }
59

    
60
    ngOnInit() {
61
    }
62

    
63
    public static convertArrayOfObjectsToCSV(args) {
64
        console.info("convertArrayOfObjectsToCSV");
65

    
66
        var result, ctr, keys, columnDelimiter, lineDelimiter, data;
67

    
68
        data = args.export || null;
69

    
70
        if (data == null || !data.length) {
71
            return null;
72
        }
73

    
74
        columnDelimiter = args.columnDelimiter || ',';
75
        lineDelimiter = args.lineDelimiter || '\n';
76

    
77
        //keys = Object.keys(data[0]);
78
        keys = args.columnNames;
79

    
80
        result = '';
81
        result += keys.join(columnDelimiter);
82
        result += lineDelimiter;
83
/*
84
        data.forEach(function(item) {
85
            ctr = 0;
86
            keys.forEach(function(key) {
87
                if (ctr > 0) result += columnDelimiter;
88
                result += item[key];
89
                ctr++;
90
            });
91
            result += lineDelimiter;
92
        });
93
*/
94

    
95
        for(let line of data) {
96
            ctr = 0;
97
            for(let column of line) {
98
                if (ctr > 0) result += columnDelimiter;
99
                result += column;
100
                ctr++;
101
            }
102
            result += lineDelimiter;
103
        }
104

    
105
        return result;
106
    }
107

    
108
    public static downloadCSV(data: any, filenameArg: string) {
109
        console.info("downloadCSV");
110

    
111
        var encodedData, filename, link;
112

    
113
        var csv = this.convertArrayOfObjectsToCSV(data);
114
        if (csv == null) return;
115

    
116
        filename = filenameArg || 'export.csv';
117

    
118
        if (!csv.match(/^data:text\/csv/i)) {
119
            csv = 'data:text/csv;charset=utf-8,' + csv;
120
        }
121
        encodedData = encodeURI(csv);
122

    
123
        //link = document.createElement('a');
124
        link = document.getElementsByTagName('a');
125
        link[0].setAttribute('href', encodedData);
126
        link[0].setAttribute('download', filename);
127
        //document.body.appendChild(link);
128
        link[0].click();
129
        //document.body.removeChild(link);
130
    }
131
}
(7-7/16)