devextreme-exceljs-fork 4.4.7 → 4.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dx-exceljs-fork.bare.js +445 -541
- package/dist/dx-exceljs-fork.bare.js.map +18 -18
- package/dist/dx-exceljs-fork.bare.min.js +7 -7
- package/dist/dx-exceljs-fork.bare.min.js.map +1 -1
- package/dist/dx-exceljs-fork.js +445 -541
- package/dist/dx-exceljs-fork.js.map +18 -18
- package/dist/dx-exceljs-fork.min.js +6 -6
- package/dist/dx-exceljs-fork.min.js.map +1 -1
- package/dist/es5/csv/csv.js +1 -1
- package/dist/es5/csv/csv.js.map +1 -1
- package/dist/es5/doc/cell.js +5 -5
- package/dist/es5/doc/cell.js.map +1 -1
- package/dist/es5/doc/pivot-table.js +1 -1
- package/dist/es5/doc/pivot-table.js.map +1 -1
- package/dist/es5/doc/range.js +7 -7
- package/dist/es5/doc/range.js.map +1 -1
- package/dist/es5/doc/row.js +1 -1
- package/dist/es5/doc/row.js.map +1 -1
- package/dist/es5/doc/table.js +10 -10
- package/dist/es5/doc/table.js.map +1 -1
- package/dist/es5/doc/worksheet.js +7 -6
- package/dist/es5/doc/worksheet.js.map +1 -1
- package/dist/es5/stream/xlsx/hyperlink-reader.js +26 -49
- package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -1
- package/dist/es5/stream/xlsx/sheet-comments-writer.js +6 -6
- package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -1
- package/dist/es5/stream/xlsx/sheet-rels-writer.js +6 -5
- package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -1
- package/dist/es5/stream/xlsx/workbook-reader.js +215 -320
- package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -1
- package/dist/es5/stream/xlsx/workbook-writer.js +8 -8
- package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -1
- package/dist/es5/stream/xlsx/worksheet-reader.js +265 -341
- package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -1
- package/dist/es5/stream/xlsx/worksheet-writer.js +9 -13
- package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -1
- package/dist/es5/utils/col-cache.js +14 -18
- package/dist/es5/utils/col-cache.js.map +1 -1
- package/dist/es5/utils/copy-style.js +12 -10
- package/dist/es5/utils/copy-style.js.map +1 -1
- package/dist/es5/utils/encryptor.js +1 -1
- package/dist/es5/utils/encryptor.js.map +1 -1
- package/dist/es5/utils/iterate-stream.js +26 -37
- package/dist/es5/utils/iterate-stream.js.map +1 -1
- package/dist/es5/utils/parse-sax.js +34 -67
- package/dist/es5/utils/parse-sax.js.map +1 -1
- package/dist/es5/utils/utils.js +1 -1
- package/dist/es5/utils/utils.js.map +1 -1
- package/dist/es5/utils/xml-stream.js +1 -1
- package/dist/es5/utils/xml-stream.js.map +1 -1
- package/dist/es5/xlsx/xform/base-xform.js +12 -35
- package/dist/es5/xlsx/xform/base-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/book/workbook-xform.js +5 -5
- package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/comment/comment-xform.js +4 -8
- package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/core/content-types-xform.js +5 -5
- package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/core/core-xform.js +2 -2
- package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/core/relationships-xform.js +2 -2
- package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +1 -1
- package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/list-xform.js +1 -1
- package/dist/es5/xlsx/xform/list-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/pivot-table/cache-field.js +8 -2
- package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -1
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +3 -7
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +7 -11
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +70 -10
- package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +1 -1
- package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/cell-xform.js +4 -8
- package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +18 -22
- package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -2
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +11 -13
- package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/merges.js +1 -1
- package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/row-xform.js +2 -2
- package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +10 -10
- package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +2 -2
- package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/style/border-xform.js +3 -7
- package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/table/auto-filter-xform.js +2 -2
- package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/table/filter-column-xform.js +1 -1
- package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -1
- package/dist/es5/xlsx/xform/table/table-xform.js +3 -7
- package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -1
- package/dist/es5/xlsx/xlsx.js +22 -45
- package/dist/es5/xlsx/xlsx.js.map +1 -1
- package/package.json +13 -14
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
6
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
7
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
-
function _asyncGeneratorDelegate(t) { var e = {}, n = !1; function pump(e, r) { return n = !0, r = new Promise(function (n) { n(t[e](r)); }), { done: !1, value: new _OverloadYield(r, 1) }; } return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () { return this; }, e.next = function (t) { return n ? (n = !1, t) : pump("next", t); }, "function" == typeof t.throw && (e.throw = function (t) { if (n) throw n = !1, t; return pump("throw", t); }), "function" == typeof t.return && (e.return = function (t) { return n ? (n = !1, t) : pump("return", t); }), e; }
|
|
9
|
-
function _awaitAsyncGenerator(e) { return new _OverloadYield(e, 0); }
|
|
10
|
-
function _wrapAsyncGenerator(e) { return function () { return new AsyncGenerator(e.apply(this, arguments)); }; }
|
|
11
|
-
function AsyncGenerator(e) { var r, t; function resume(r, t) { try { var n = e[r](t), o = n.value, u = o instanceof _OverloadYield; Promise.resolve(u ? o.v : o).then(function (t) { if (u) { var i = "return" === r ? "return" : "next"; if (!o.k || t.done) return resume(i, t); t = e[i](t).value; } settle(n.done ? "return" : "normal", t); }, function (e) { resume("throw", e); }); } catch (e) { settle("throw", e); } } function settle(e, n) { switch (e) { case "return": r.resolve({ value: n, done: !0 }); break; case "throw": r.reject(n); break; default: r.resolve({ value: n, done: !1 }); } (r = r.next) ? resume(r.key, r.arg) : t = null; } this._invoke = function (e, n) { return new Promise(function (o, u) { var i = { key: e, arg: n, resolve: o, reject: u, next: null }; t ? t = t.next = i : (r = t = i, resume(e, n)); }); }, "function" != typeof e.return && (this.return = void 0); }
|
|
12
|
-
AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () { return this; }, AsyncGenerator.prototype.next = function (e) { return this._invoke("next", e); }, AsyncGenerator.prototype.throw = function (e) { return this._invoke("throw", e); }, AsyncGenerator.prototype.return = function (e) { return this._invoke("return", e); };
|
|
13
|
-
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
14
|
-
function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
15
|
-
function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function (r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function () { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function (r) { var n = this.s.return; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, throw: function (r) { var n = this.s.return; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
|
|
16
3
|
const fs = require('fs');
|
|
17
4
|
const {
|
|
18
5
|
EventEmitter
|
|
@@ -37,13 +24,14 @@ class WorkbookReader extends EventEmitter {
|
|
|
37
24
|
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
38
25
|
super();
|
|
39
26
|
this.input = input;
|
|
40
|
-
this.options =
|
|
27
|
+
this.options = {
|
|
41
28
|
worksheets: 'emit',
|
|
42
29
|
sharedStrings: 'cache',
|
|
43
30
|
hyperlinks: 'ignore',
|
|
44
31
|
styles: 'ignore',
|
|
45
|
-
entries: 'ignore'
|
|
46
|
-
|
|
32
|
+
entries: 'ignore',
|
|
33
|
+
...options
|
|
34
|
+
};
|
|
47
35
|
this.styles = new StyleManager();
|
|
48
36
|
this.styles.init();
|
|
49
37
|
}
|
|
@@ -54,46 +42,25 @@ class WorkbookReader extends EventEmitter {
|
|
|
54
42
|
if (typeof input === 'string') {
|
|
55
43
|
return fs.createReadStream(input);
|
|
56
44
|
}
|
|
57
|
-
throw new Error(
|
|
45
|
+
throw new Error(`Could not recognise input: ${input}`);
|
|
58
46
|
}
|
|
59
47
|
async read(input, options) {
|
|
60
48
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
eventType,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.emit(eventType, value);
|
|
77
|
-
await value.read();
|
|
78
|
-
break;
|
|
79
|
-
case 'hyperlinks':
|
|
80
|
-
this.emit(eventType, value);
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
} catch (err) {
|
|
86
|
-
_didIteratorError = true;
|
|
87
|
-
_iteratorError = err;
|
|
88
|
-
} finally {
|
|
89
|
-
try {
|
|
90
|
-
if (_iteratorAbruptCompletion && _iterator.return != null) {
|
|
91
|
-
await _iterator.return();
|
|
92
|
-
}
|
|
93
|
-
} finally {
|
|
94
|
-
if (_didIteratorError) {
|
|
95
|
-
throw _iteratorError;
|
|
96
|
-
}
|
|
49
|
+
for await (const {
|
|
50
|
+
eventType,
|
|
51
|
+
value
|
|
52
|
+
} of this.parse(input, options)) {
|
|
53
|
+
switch (eventType) {
|
|
54
|
+
case 'shared-strings':
|
|
55
|
+
this.emit(eventType, value);
|
|
56
|
+
break;
|
|
57
|
+
case 'worksheet':
|
|
58
|
+
this.emit(eventType, value);
|
|
59
|
+
await value.read();
|
|
60
|
+
break;
|
|
61
|
+
case 'hyperlinks':
|
|
62
|
+
this.emit(eventType, value);
|
|
63
|
+
break;
|
|
97
64
|
}
|
|
98
65
|
}
|
|
99
66
|
this.emit('end');
|
|
@@ -102,142 +69,94 @@ class WorkbookReader extends EventEmitter {
|
|
|
102
69
|
this.emit('error', error);
|
|
103
70
|
}
|
|
104
71
|
}
|
|
105
|
-
[Symbol.asyncIterator]() {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
for (var _iterator2 = _asyncIterator(_this.parse()), _step2; _iteratorAbruptCompletion2 = !(_step2 = yield _awaitAsyncGenerator(_iterator2.next())).done; _iteratorAbruptCompletion2 = false) {
|
|
113
|
-
const {
|
|
114
|
-
eventType,
|
|
115
|
-
value
|
|
116
|
-
} = _step2.value;
|
|
117
|
-
{
|
|
118
|
-
if (eventType === 'worksheet') {
|
|
119
|
-
yield value;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
} catch (err) {
|
|
124
|
-
_didIteratorError2 = true;
|
|
125
|
-
_iteratorError2 = err;
|
|
126
|
-
} finally {
|
|
127
|
-
try {
|
|
128
|
-
if (_iteratorAbruptCompletion2 && _iterator2.return != null) {
|
|
129
|
-
yield _awaitAsyncGenerator(_iterator2.return());
|
|
130
|
-
}
|
|
131
|
-
} finally {
|
|
132
|
-
if (_didIteratorError2) {
|
|
133
|
-
throw _iteratorError2;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
72
|
+
async *[Symbol.asyncIterator]() {
|
|
73
|
+
for await (const {
|
|
74
|
+
eventType,
|
|
75
|
+
value
|
|
76
|
+
} of this.parse()) {
|
|
77
|
+
if (eventType === 'worksheet') {
|
|
78
|
+
yield value;
|
|
136
79
|
}
|
|
137
|
-
}
|
|
80
|
+
}
|
|
138
81
|
}
|
|
139
|
-
parse(input, options) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
stream.pipe(zip);
|
|
82
|
+
async *parse(input, options) {
|
|
83
|
+
if (options) this.options = options;
|
|
84
|
+
const stream = this.stream = this._getStream(input || this.input);
|
|
85
|
+
const zip = unzip.Parse({
|
|
86
|
+
forceStream: true
|
|
87
|
+
});
|
|
88
|
+
stream.pipe(zip);
|
|
148
89
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
} else {
|
|
182
|
-
// create temp file for each worksheet
|
|
183
|
-
yield _awaitAsyncGenerator(new Promise((resolve, reject) => {
|
|
184
|
-
tmp.file((err, path, fd, tempFileCleanupCallback) => {
|
|
185
|
-
if (err) {
|
|
186
|
-
return reject(err);
|
|
187
|
-
}
|
|
188
|
-
waitingWorkSheets.push({
|
|
189
|
-
sheetNo,
|
|
190
|
-
path,
|
|
191
|
-
tempFileCleanupCallback
|
|
192
|
-
});
|
|
193
|
-
const tempStream = fs.createWriteStream(path);
|
|
194
|
-
tempStream.on('error', reject);
|
|
195
|
-
entry.pipe(tempStream);
|
|
196
|
-
return tempStream.on('finish', () => {
|
|
197
|
-
return resolve();
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
}));
|
|
90
|
+
// worksheets, deferred for parsing after shared strings reading
|
|
91
|
+
const waitingWorkSheets = [];
|
|
92
|
+
for await (const entry of zip) {
|
|
93
|
+
let match;
|
|
94
|
+
let sheetNo;
|
|
95
|
+
switch (entry.path) {
|
|
96
|
+
case '_rels/.rels':
|
|
97
|
+
break;
|
|
98
|
+
case 'xl/_rels/workbook.xml.rels':
|
|
99
|
+
await this._parseRels(entry);
|
|
100
|
+
break;
|
|
101
|
+
case 'xl/workbook.xml':
|
|
102
|
+
await this._parseWorkbook(entry);
|
|
103
|
+
break;
|
|
104
|
+
case 'xl/sharedStrings.xml':
|
|
105
|
+
yield* this._parseSharedStrings(entry);
|
|
106
|
+
break;
|
|
107
|
+
case 'xl/styles.xml':
|
|
108
|
+
await this._parseStyles(entry);
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
if (entry.path.match(/xl\/worksheets\/sheet\d+[.]xml/)) {
|
|
112
|
+
match = entry.path.match(/xl\/worksheets\/sheet(\d+)[.]xml/);
|
|
113
|
+
sheetNo = match[1];
|
|
114
|
+
if (this.sharedStrings && this.workbookRels) {
|
|
115
|
+
yield* this._parseWorksheet(iterateStream(entry), sheetNo);
|
|
116
|
+
} else {
|
|
117
|
+
// create temp file for each worksheet
|
|
118
|
+
await new Promise((resolve, reject) => {
|
|
119
|
+
tmp.file((err, path, fd, tempFileCleanupCallback) => {
|
|
120
|
+
if (err) {
|
|
121
|
+
return reject(err);
|
|
201
122
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
123
|
+
waitingWorkSheets.push({
|
|
124
|
+
sheetNo,
|
|
125
|
+
path,
|
|
126
|
+
tempFileCleanupCallback
|
|
127
|
+
});
|
|
128
|
+
const tempStream = fs.createWriteStream(path);
|
|
129
|
+
tempStream.on('error', reject);
|
|
130
|
+
entry.pipe(tempStream);
|
|
131
|
+
return tempStream.on('finish', () => {
|
|
132
|
+
return resolve();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
208
136
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
_didIteratorError3 = true;
|
|
214
|
-
_iteratorError3 = err;
|
|
215
|
-
} finally {
|
|
216
|
-
try {
|
|
217
|
-
if (_iteratorAbruptCompletion3 && _iterator3.return != null) {
|
|
218
|
-
yield _awaitAsyncGenerator(_iterator3.return());
|
|
219
|
-
}
|
|
220
|
-
} finally {
|
|
221
|
-
if (_didIteratorError3) {
|
|
222
|
-
throw _iteratorError3;
|
|
137
|
+
} else if (entry.path.match(/xl\/worksheets\/_rels\/sheet\d+[.]xml.rels/)) {
|
|
138
|
+
match = entry.path.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/);
|
|
139
|
+
sheetNo = match[1];
|
|
140
|
+
yield* this._parseHyperlinks(iterateStream(entry), sheetNo);
|
|
223
141
|
}
|
|
224
|
-
|
|
142
|
+
break;
|
|
225
143
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
tempFileCleanupCallback();
|
|
144
|
+
entry.autodrain();
|
|
145
|
+
}
|
|
146
|
+
for (const {
|
|
147
|
+
sheetNo,
|
|
148
|
+
path,
|
|
149
|
+
tempFileCleanupCallback
|
|
150
|
+
} of waitingWorkSheets) {
|
|
151
|
+
let fileStream = fs.createReadStream(path);
|
|
152
|
+
// TODO: Remove once node v8 is deprecated
|
|
153
|
+
// Detect and upgrade old fileStreams
|
|
154
|
+
if (!fileStream[Symbol.asyncIterator]) {
|
|
155
|
+
fileStream = fileStream.pipe(new PassThrough());
|
|
239
156
|
}
|
|
240
|
-
|
|
157
|
+
yield* this._parseWorksheet(fileStream, sheetNo);
|
|
158
|
+
tempFileCleanupCallback();
|
|
159
|
+
}
|
|
241
160
|
}
|
|
242
161
|
_emitEntry(payload) {
|
|
243
162
|
if (this.options.entries === 'emit') {
|
|
@@ -257,149 +176,125 @@ class WorkbookReader extends EventEmitter {
|
|
|
257
176
|
this.properties = workbook.map.workbookPr;
|
|
258
177
|
this.model = workbook.model;
|
|
259
178
|
}
|
|
260
|
-
_parseSharedStrings(entry) {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
font = font || {};
|
|
299
|
-
font.charset = parseInt(node.attributes.charset, 10);
|
|
300
|
-
break;
|
|
301
|
-
case 'color':
|
|
302
|
-
font = font || {};
|
|
303
|
-
font.color = {};
|
|
304
|
-
if (node.attributes.rgb) {
|
|
305
|
-
font.color.argb = node.attributes.argb;
|
|
306
|
-
}
|
|
307
|
-
if (node.attributes.val) {
|
|
308
|
-
font.color.argb = node.attributes.val;
|
|
309
|
-
}
|
|
310
|
-
if (node.attributes.theme) {
|
|
311
|
-
font.color.theme = node.attributes.theme;
|
|
312
|
-
}
|
|
313
|
-
break;
|
|
314
|
-
case 'family':
|
|
315
|
-
font = font || {};
|
|
316
|
-
font.family = parseInt(node.attributes.val, 10);
|
|
317
|
-
break;
|
|
318
|
-
case 'i':
|
|
319
|
-
font = font || {};
|
|
320
|
-
font.italic = true;
|
|
321
|
-
break;
|
|
322
|
-
case 'outline':
|
|
323
|
-
font = font || {};
|
|
324
|
-
font.outline = true;
|
|
325
|
-
break;
|
|
326
|
-
case 'rFont':
|
|
327
|
-
font = font || {};
|
|
328
|
-
font.name = node.value;
|
|
329
|
-
break;
|
|
330
|
-
case 'si':
|
|
331
|
-
font = null;
|
|
332
|
-
richText = [];
|
|
333
|
-
text = null;
|
|
334
|
-
break;
|
|
335
|
-
case 'sz':
|
|
336
|
-
font = font || {};
|
|
337
|
-
font.size = parseInt(node.attributes.val, 10);
|
|
338
|
-
break;
|
|
339
|
-
case 'strike':
|
|
340
|
-
break;
|
|
341
|
-
case 't':
|
|
342
|
-
text = null;
|
|
343
|
-
break;
|
|
344
|
-
case 'u':
|
|
345
|
-
font = font || {};
|
|
346
|
-
font.underline = true;
|
|
347
|
-
break;
|
|
348
|
-
case 'vertAlign':
|
|
349
|
-
font = font || {};
|
|
350
|
-
font.vertAlign = node.attributes.val;
|
|
351
|
-
break;
|
|
352
|
-
}
|
|
353
|
-
} else if (eventType === 'text') {
|
|
354
|
-
text = text ? text + value : value;
|
|
355
|
-
} else if (eventType === 'closetag') {
|
|
356
|
-
const node = value;
|
|
357
|
-
switch (node.name) {
|
|
358
|
-
case 'r':
|
|
359
|
-
richText.push({
|
|
360
|
-
font,
|
|
361
|
-
text
|
|
362
|
-
});
|
|
363
|
-
font = null;
|
|
364
|
-
text = null;
|
|
365
|
-
break;
|
|
366
|
-
case 'si':
|
|
367
|
-
if (_this3.options.sharedStrings === 'cache') {
|
|
368
|
-
_this3.sharedStrings.push(richText.length ? {
|
|
369
|
-
richText
|
|
370
|
-
} : text);
|
|
371
|
-
} else if (_this3.options.sharedStrings === 'emit') {
|
|
372
|
-
yield {
|
|
373
|
-
index: index++,
|
|
374
|
-
text: richText.length ? {
|
|
375
|
-
richText
|
|
376
|
-
} : text
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
richText = [];
|
|
380
|
-
font = null;
|
|
381
|
-
text = null;
|
|
382
|
-
break;
|
|
383
|
-
}
|
|
179
|
+
async *_parseSharedStrings(entry) {
|
|
180
|
+
this._emitEntry({
|
|
181
|
+
type: 'shared-strings'
|
|
182
|
+
});
|
|
183
|
+
switch (this.options.sharedStrings) {
|
|
184
|
+
case 'cache':
|
|
185
|
+
this.sharedStrings = [];
|
|
186
|
+
break;
|
|
187
|
+
case 'emit':
|
|
188
|
+
break;
|
|
189
|
+
default:
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
let text = null;
|
|
193
|
+
let richText = [];
|
|
194
|
+
let index = 0;
|
|
195
|
+
let font = null;
|
|
196
|
+
for await (const events of parseSax(iterateStream(entry))) {
|
|
197
|
+
for (const {
|
|
198
|
+
eventType,
|
|
199
|
+
value
|
|
200
|
+
} of events) {
|
|
201
|
+
if (eventType === 'opentag') {
|
|
202
|
+
const node = value;
|
|
203
|
+
switch (node.name) {
|
|
204
|
+
case 'b':
|
|
205
|
+
font = font || {};
|
|
206
|
+
font.bold = true;
|
|
207
|
+
break;
|
|
208
|
+
case 'charset':
|
|
209
|
+
font = font || {};
|
|
210
|
+
font.charset = parseInt(node.attributes.charset, 10);
|
|
211
|
+
break;
|
|
212
|
+
case 'color':
|
|
213
|
+
font = font || {};
|
|
214
|
+
font.color = {};
|
|
215
|
+
if (node.attributes.rgb) {
|
|
216
|
+
font.color.argb = node.attributes.argb;
|
|
384
217
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
218
|
+
if (node.attributes.val) {
|
|
219
|
+
font.color.argb = node.attributes.val;
|
|
220
|
+
}
|
|
221
|
+
if (node.attributes.theme) {
|
|
222
|
+
font.color.theme = node.attributes.theme;
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
case 'family':
|
|
226
|
+
font = font || {};
|
|
227
|
+
font.family = parseInt(node.attributes.val, 10);
|
|
228
|
+
break;
|
|
229
|
+
case 'i':
|
|
230
|
+
font = font || {};
|
|
231
|
+
font.italic = true;
|
|
232
|
+
break;
|
|
233
|
+
case 'outline':
|
|
234
|
+
font = font || {};
|
|
235
|
+
font.outline = true;
|
|
236
|
+
break;
|
|
237
|
+
case 'rFont':
|
|
238
|
+
font = font || {};
|
|
239
|
+
font.name = node.value;
|
|
240
|
+
break;
|
|
241
|
+
case 'si':
|
|
242
|
+
font = null;
|
|
243
|
+
richText = [];
|
|
244
|
+
text = null;
|
|
245
|
+
break;
|
|
246
|
+
case 'sz':
|
|
247
|
+
font = font || {};
|
|
248
|
+
font.size = parseInt(node.attributes.val, 10);
|
|
249
|
+
break;
|
|
250
|
+
case 'strike':
|
|
251
|
+
break;
|
|
252
|
+
case 't':
|
|
253
|
+
text = null;
|
|
254
|
+
break;
|
|
255
|
+
case 'u':
|
|
256
|
+
font = font || {};
|
|
257
|
+
font.underline = true;
|
|
258
|
+
break;
|
|
259
|
+
case 'vertAlign':
|
|
260
|
+
font = font || {};
|
|
261
|
+
font.vertAlign = node.attributes.val;
|
|
262
|
+
break;
|
|
395
263
|
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
|
|
264
|
+
} else if (eventType === 'text') {
|
|
265
|
+
text = text ? text + value : value;
|
|
266
|
+
} else if (eventType === 'closetag') {
|
|
267
|
+
const node = value;
|
|
268
|
+
switch (node.name) {
|
|
269
|
+
case 'r':
|
|
270
|
+
richText.push({
|
|
271
|
+
font,
|
|
272
|
+
text
|
|
273
|
+
});
|
|
274
|
+
font = null;
|
|
275
|
+
text = null;
|
|
276
|
+
break;
|
|
277
|
+
case 'si':
|
|
278
|
+
if (this.options.sharedStrings === 'cache') {
|
|
279
|
+
this.sharedStrings.push(richText.length ? {
|
|
280
|
+
richText
|
|
281
|
+
} : text);
|
|
282
|
+
} else if (this.options.sharedStrings === 'emit') {
|
|
283
|
+
yield {
|
|
284
|
+
index: index++,
|
|
285
|
+
text: richText.length ? {
|
|
286
|
+
richText
|
|
287
|
+
} : text
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
richText = [];
|
|
291
|
+
font = null;
|
|
292
|
+
text = null;
|
|
293
|
+
break;
|
|
399
294
|
}
|
|
400
295
|
}
|
|
401
296
|
}
|
|
402
|
-
}
|
|
297
|
+
}
|
|
403
298
|
}
|
|
404
299
|
async _parseStyles(entry) {
|
|
405
300
|
this._emitEntry({
|
|
@@ -421,7 +316,7 @@ class WorkbookReader extends EventEmitter {
|
|
|
421
316
|
iterator,
|
|
422
317
|
options: this.options
|
|
423
318
|
});
|
|
424
|
-
const matchingRel = (this.workbookRels || []).find(rel => rel.Target ===
|
|
319
|
+
const matchingRel = (this.workbookRels || []).find(rel => rel.Target === `worksheets/sheet${sheetNo}.xml`);
|
|
425
320
|
const matchingSheet = matchingRel && (this.model.sheets || []).find(sheet => sheet.rId === matchingRel.Id);
|
|
426
321
|
if (matchingSheet) {
|
|
427
322
|
worksheetReader.id = matchingSheet.id;
|