-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflatFile.js
More file actions
108 lines (93 loc) · 3.08 KB
/
flatFile.js
File metadata and controls
108 lines (93 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
var Table = require("./objects.js");
var CSV = require("./csv.js").CSV;
var XML = require("./xml.js").XML;
var MYJSON = require("./json.js").MYJSON;
var XLSX = require("./xlsx.js");
var X = XLSX;
var wtf_mode = false;
function ab2str(data) {
var o = "", l = 0, w = 10240;
for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w)));
o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w)));
return o;
}
function s2ab(s) {
var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
return [v, b];
}
function xw_xfer(data, mimeType, fileType, cb) {
try {
var val = s2ab(data);
var v;
v = X.read(ab2str(val[1]), {type: 'binary', cellDates: true});
var res = {t:"xlsx", d:JSON.stringify(v)};
var r = s2ab(res.d)[1];
xx = ab2str(r).replace(/\n/g,"\\n").replace(/\r/g,"\\r");
to_object(JSON.parse(xx), mimeType, fileType, cb);
} catch (e) {
cb(e, null);
}
}
function to_object(workbook, mimeType, fileType, cb) {
var tables = new Array();
workbook.SheetNames.forEach(function(sheetName) {
var roa = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var table = new Table.Table();
table.meta = new Table.Metadata();
table.meta.tableName = sheetName;
table.meta.fileType = fileType;
table.meta.mimeType = mimeType;
X.loadTable(workbook.Sheets[sheetName], table);
var tv = new Table.TableView(table);
tv.initTableView();
tables.push(tv);
});
cb(null, tables);
}
function getFileExtension(filename) {
return filename.split('.').pop();
}
module.exports = {
processFile: function (f, cb) {
var flag = 0;
var reader = new FileReader();
var name = f.name;
var ftype = f.type;
var fExtension = getFileExtension(name);
/* csv, xml, json */
if (ftype.match(/text.*/) || fExtension == "csv" || fExtension == "xml" || fExtension == "json") {
var tables = new Array;
var table = new Table.Table();
table.meta = new Table.Metadata();
table.meta.tableName = name.split('.')[0];
table.meta.fileType = fExtension;
table.meta.mimeType = ftype;
reader.onload = function(e){
var data = e.target.result;
if (ftype == "text/csv" || fExtension == "csv"){
var sheet = CSV.parse(data);
//console.log(sheet);
CSV.loadTable(sheet, table);
} else if (ftype == "text/xml" || fExtension == "xml"){
var sheet = XML.parse(data);
XML.loadTable(sheet, table);
} else if (ftype == "text/json" || fExtension == "json") {
var sheet = MYJSON.parse(data);
MYJSON.loadTable(sheet, table);
}
var tv = new Table.TableView(table);
tv.initTableView();
tables.push(tv);
cb(tables);
};
reader.readAsText(f, "UTF-8");
} else { /* xlsx, xls, ods, ots */
reader.onload = function(e) {
var data = e.target.result;
xw_xfer(data, ftype, fExtension, cb);
};
reader.readAsBinaryString(f);
}
}
};