@alienkarma/exceljs 4.4.0-fork.1

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.
Files changed (537) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3024 -0
  3. package/README_zh.md +2878 -0
  4. package/dist/LICENSE +22 -0
  5. package/dist/es5/csv/csv.js +182 -0
  6. package/dist/es5/csv/csv.js.map +1 -0
  7. package/dist/es5/csv/line-buffer.js +68 -0
  8. package/dist/es5/csv/line-buffer.js.map +1 -0
  9. package/dist/es5/csv/stream-converter.js +110 -0
  10. package/dist/es5/csv/stream-converter.js.map +1 -0
  11. package/dist/es5/doc/anchor.js +73 -0
  12. package/dist/es5/doc/anchor.js.map +1 -0
  13. package/dist/es5/doc/cell.js +960 -0
  14. package/dist/es5/doc/cell.js.map +1 -0
  15. package/dist/es5/doc/column.js +274 -0
  16. package/dist/es5/doc/column.js.map +1 -0
  17. package/dist/es5/doc/data-validations.js +18 -0
  18. package/dist/es5/doc/data-validations.js.map +1 -0
  19. package/dist/es5/doc/defined-names.js +173 -0
  20. package/dist/es5/doc/defined-names.js.map +1 -0
  21. package/dist/es5/doc/enums.js +49 -0
  22. package/dist/es5/doc/enums.js.map +1 -0
  23. package/dist/es5/doc/image.js +69 -0
  24. package/dist/es5/doc/image.js.map +1 -0
  25. package/dist/es5/doc/modelcontainer.js +16 -0
  26. package/dist/es5/doc/modelcontainer.js.map +1 -0
  27. package/dist/es5/doc/note.js +64 -0
  28. package/dist/es5/doc/note.js.map +1 -0
  29. package/dist/es5/doc/pivot-table.js +137 -0
  30. package/dist/es5/doc/pivot-table.js.map +1 -0
  31. package/dist/es5/doc/range.js +229 -0
  32. package/dist/es5/doc/range.js.map +1 -0
  33. package/dist/es5/doc/row.js +382 -0
  34. package/dist/es5/doc/row.js.map +1 -0
  35. package/dist/es5/doc/table.js +441 -0
  36. package/dist/es5/doc/table.js.map +1 -0
  37. package/dist/es5/doc/workbook.js +205 -0
  38. package/dist/es5/doc/workbook.js.map +1 -0
  39. package/dist/es5/doc/worksheet.js +918 -0
  40. package/dist/es5/doc/worksheet.js.map +1 -0
  41. package/dist/es5/exceljs.bare.js +14 -0
  42. package/dist/es5/exceljs.bare.js.map +1 -0
  43. package/dist/es5/exceljs.browser.js +36 -0
  44. package/dist/es5/exceljs.browser.js.map +1 -0
  45. package/dist/es5/exceljs.nodejs.js +15 -0
  46. package/dist/es5/exceljs.nodejs.js.map +1 -0
  47. package/dist/es5/index.js +15 -0
  48. package/dist/es5/stream/xlsx/hyperlink-reader.js +90 -0
  49. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -0
  50. package/dist/es5/stream/xlsx/sheet-comments-writer.js +94 -0
  51. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -0
  52. package/dist/es5/stream/xlsx/sheet-rels-writer.js +94 -0
  53. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -0
  54. package/dist/es5/stream/xlsx/workbook-reader.js +362 -0
  55. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -0
  56. package/dist/es5/stream/xlsx/workbook-writer.js +347 -0
  57. package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -0
  58. package/dist/es5/stream/xlsx/worksheet-reader.js +392 -0
  59. package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -0
  60. package/dist/es5/stream/xlsx/worksheet-writer.js +652 -0
  61. package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -0
  62. package/dist/es5/utils/auto-drain.js +18 -0
  63. package/dist/es5/utils/auto-drain.js.map +1 -0
  64. package/dist/es5/utils/browser-buffer-decode.js +15 -0
  65. package/dist/es5/utils/browser-buffer-decode.js.map +1 -0
  66. package/dist/es5/utils/browser-buffer-encode.js +18 -0
  67. package/dist/es5/utils/browser-buffer-encode.js.map +1 -0
  68. package/dist/es5/utils/cell-matrix.js +149 -0
  69. package/dist/es5/utils/cell-matrix.js.map +1 -0
  70. package/dist/es5/utils/col-cache.js +258 -0
  71. package/dist/es5/utils/col-cache.js.map +1 -0
  72. package/dist/es5/utils/copy-style.js +43 -0
  73. package/dist/es5/utils/copy-style.js.map +1 -0
  74. package/dist/es5/utils/encryptor.js +58 -0
  75. package/dist/es5/utils/encryptor.js.map +1 -0
  76. package/dist/es5/utils/iterate-stream.js +46 -0
  77. package/dist/es5/utils/iterate-stream.js.map +1 -0
  78. package/dist/es5/utils/parse-sax.js +47 -0
  79. package/dist/es5/utils/parse-sax.js.map +1 -0
  80. package/dist/es5/utils/shared-formula.js +42 -0
  81. package/dist/es5/utils/shared-formula.js.map +1 -0
  82. package/dist/es5/utils/shared-strings.js +32 -0
  83. package/dist/es5/utils/shared-strings.js.map +1 -0
  84. package/dist/es5/utils/stream-base64.js +66 -0
  85. package/dist/es5/utils/stream-base64.js.map +1 -0
  86. package/dist/es5/utils/stream-buf.js +343 -0
  87. package/dist/es5/utils/stream-buf.js.map +1 -0
  88. package/dist/es5/utils/string-buf.js +73 -0
  89. package/dist/es5/utils/string-buf.js.map +1 -0
  90. package/dist/es5/utils/string-builder.js +32 -0
  91. package/dist/es5/utils/string-builder.js.map +1 -0
  92. package/dist/es5/utils/stuttered-pipe.js +61 -0
  93. package/dist/es5/utils/stuttered-pipe.js.map +1 -0
  94. package/dist/es5/utils/typed-stack.js +23 -0
  95. package/dist/es5/utils/typed-stack.js.map +1 -0
  96. package/dist/es5/utils/under-dash.js +168 -0
  97. package/dist/es5/utils/under-dash.js.map +1 -0
  98. package/dist/es5/utils/utils.js +204 -0
  99. package/dist/es5/utils/utils.js.map +1 -0
  100. package/dist/es5/utils/xml-stream.js +151 -0
  101. package/dist/es5/utils/xml-stream.js.map +1 -0
  102. package/dist/es5/utils/zip-stream.js +79 -0
  103. package/dist/es5/utils/zip-stream.js.map +1 -0
  104. package/dist/es5/xlsx/defaultnumformats.js +230 -0
  105. package/dist/es5/xlsx/defaultnumformats.js.map +1 -0
  106. package/dist/es5/xlsx/rel-type.js +21 -0
  107. package/dist/es5/xlsx/rel-type.js.map +1 -0
  108. package/dist/es5/xlsx/xform/base-xform.js +139 -0
  109. package/dist/es5/xlsx/xform/base-xform.js.map +1 -0
  110. package/dist/es5/xlsx/xform/book/defined-name-xform.js +85 -0
  111. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -0
  112. package/dist/es5/xlsx/xform/book/sheet-xform.js +32 -0
  113. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +1 -0
  114. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
  115. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +1 -0
  116. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
  117. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +1 -0
  118. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +27 -0
  119. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +1 -0
  120. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +51 -0
  121. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +1 -0
  122. package/dist/es5/xlsx/xform/book/workbook-xform.js +241 -0
  123. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -0
  124. package/dist/es5/xlsx/xform/comment/comment-xform.js +103 -0
  125. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -0
  126. package/dist/es5/xlsx/xform/comment/comments-xform.js +76 -0
  127. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +1 -0
  128. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +35 -0
  129. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +1 -0
  130. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +32 -0
  131. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +1 -0
  132. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +53 -0
  133. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +1 -0
  134. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +97 -0
  135. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +1 -0
  136. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +107 -0
  137. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
  138. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +92 -0
  139. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -0
  140. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +61 -0
  141. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -0
  142. package/dist/es5/xlsx/xform/composite-xform.js +51 -0
  143. package/dist/es5/xlsx/xform/composite-xform.js.map +1 -0
  144. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +30 -0
  145. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +1 -0
  146. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +27 -0
  147. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +1 -0
  148. package/dist/es5/xlsx/xform/core/app-xform.js +93 -0
  149. package/dist/es5/xlsx/xform/core/app-xform.js.map +1 -0
  150. package/dist/es5/xlsx/xform/core/content-types-xform.js +127 -0
  151. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
  152. package/dist/es5/xlsx/xform/core/core-xform.js +158 -0
  153. package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -0
  154. package/dist/es5/xlsx/xform/core/relationship-xform.js +23 -0
  155. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +1 -0
  156. package/dist/es5/xlsx/xform/core/relationships-xform.js +65 -0
  157. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -0
  158. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
  159. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +1 -0
  160. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +61 -0
  161. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +1 -0
  162. package/dist/es5/xlsx/xform/drawing/blip-xform.js +39 -0
  163. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +1 -0
  164. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
  165. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +1 -0
  166. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
  167. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -0
  168. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +82 -0
  169. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +1 -0
  170. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +98 -0
  171. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +1 -0
  172. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +40 -0
  173. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +1 -0
  174. package/dist/es5/xlsx/xform/drawing/ext-xform.js +38 -0
  175. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +1 -0
  176. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +38 -0
  177. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +1 -0
  178. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
  179. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +1 -0
  180. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  181. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +1 -0
  182. package/dist/es5/xlsx/xform/drawing/pic-xform.js +67 -0
  183. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +1 -0
  184. package/dist/es5/xlsx/xform/drawing/sp-pr.js +30 -0
  185. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +1 -0
  186. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  187. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +1 -0
  188. package/dist/es5/xlsx/xform/list-xform.js +91 -0
  189. package/dist/es5/xlsx/xform/list-xform.js.map +1 -0
  190. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +48 -0
  191. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -0
  192. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +73 -0
  193. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -0
  194. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +93 -0
  195. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -0
  196. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +176 -0
  197. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -0
  198. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +40 -0
  199. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -0
  200. package/dist/es5/xlsx/xform/sheet/cell-xform.js +450 -0
  201. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -0
  202. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +275 -0
  203. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -0
  204. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
  205. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +1 -0
  206. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
  207. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +1 -0
  208. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +45 -0
  209. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +1 -0
  210. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
  211. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -0
  212. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +42 -0
  213. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +1 -0
  214. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +71 -0
  215. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +1 -0
  216. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +22 -0
  217. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +1 -0
  218. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +43 -0
  219. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +1 -0
  220. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +28 -0
  221. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +1 -0
  222. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +88 -0
  223. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -0
  224. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
  225. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +1 -0
  226. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +52 -0
  227. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +1 -0
  228. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
  229. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +1 -0
  230. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +75 -0
  231. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +1 -0
  232. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
  233. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +1 -0
  234. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +66 -0
  235. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +1 -0
  236. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
  237. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +1 -0
  238. package/dist/es5/xlsx/xform/sheet/col-xform.js +78 -0
  239. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +1 -0
  240. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +247 -0
  241. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -0
  242. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +28 -0
  243. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +1 -0
  244. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +32 -0
  245. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +1 -0
  246. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +69 -0
  247. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +1 -0
  248. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +126 -0
  249. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +1 -0
  250. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +50 -0
  251. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +1 -0
  252. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +26 -0
  253. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +1 -0
  254. package/dist/es5/xlsx/xform/sheet/merges.js +52 -0
  255. package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -0
  256. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +35 -0
  257. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +1 -0
  258. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +24 -0
  259. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +1 -0
  260. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +46 -0
  261. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +1 -0
  262. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
  263. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +1 -0
  264. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +99 -0
  265. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +1 -0
  266. package/dist/es5/xlsx/xform/sheet/picture-xform.js +32 -0
  267. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +1 -0
  268. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +45 -0
  269. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +1 -0
  270. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +37 -0
  271. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +1 -0
  272. package/dist/es5/xlsx/xform/sheet/row-xform.js +128 -0
  273. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
  274. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +51 -0
  275. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +1 -0
  276. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +83 -0
  277. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +1 -0
  278. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +84 -0
  279. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +1 -0
  280. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +190 -0
  281. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +1 -0
  282. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +32 -0
  283. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +1 -0
  284. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +522 -0
  285. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -0
  286. package/dist/es5/xlsx/xform/simple/boolean-xform.js +27 -0
  287. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +1 -0
  288. package/dist/es5/xlsx/xform/simple/date-xform.js +58 -0
  289. package/dist/es5/xlsx/xform/simple/date-xform.js.map +1 -0
  290. package/dist/es5/xlsx/xform/simple/float-xform.js +47 -0
  291. package/dist/es5/xlsx/xform/simple/float-xform.js.map +1 -0
  292. package/dist/es5/xlsx/xform/simple/integer-xform.js +53 -0
  293. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +1 -0
  294. package/dist/es5/xlsx/xform/simple/string-xform.js +47 -0
  295. package/dist/es5/xlsx/xform/simple/string-xform.js.map +1 -0
  296. package/dist/es5/xlsx/xform/static-xform.js +61 -0
  297. package/dist/es5/xlsx/xform/static-xform.js.map +1 -0
  298. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  299. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +1 -0
  300. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +92 -0
  301. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +1 -0
  302. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +99 -0
  303. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +1 -0
  304. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +114 -0
  305. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -0
  306. package/dist/es5/xlsx/xform/strings/text-xform.js +39 -0
  307. package/dist/es5/xlsx/xform/strings/text-xform.js.map +1 -0
  308. package/dist/es5/xlsx/xform/style/alignment-xform.js +139 -0
  309. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +1 -0
  310. package/dist/es5/xlsx/xform/style/border-xform.js +185 -0
  311. package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -0
  312. package/dist/es5/xlsx/xform/style/color-xform.js +66 -0
  313. package/dist/es5/xlsx/xform/style/color-xform.js.map +1 -0
  314. package/dist/es5/xlsx/xform/style/dxf-xform.js +106 -0
  315. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +1 -0
  316. package/dist/es5/xlsx/xform/style/fill-xform.js +307 -0
  317. package/dist/es5/xlsx/xform/style/fill-xform.js.map +1 -0
  318. package/dist/es5/xlsx/xform/style/font-xform.js +175 -0
  319. package/dist/es5/xlsx/xform/style/font-xform.js.map +1 -0
  320. package/dist/es5/xlsx/xform/style/numfmt-xform.js +58 -0
  321. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +1 -0
  322. package/dist/es5/xlsx/xform/style/protection-xform.js +53 -0
  323. package/dist/es5/xlsx/xform/style/protection-xform.js.map +1 -0
  324. package/dist/es5/xlsx/xform/style/style-xform.js +118 -0
  325. package/dist/es5/xlsx/xform/style/style-xform.js.map +1 -0
  326. package/dist/es5/xlsx/xform/style/styles-xform.js +611 -0
  327. package/dist/es5/xlsx/xform/style/styles-xform.js.map +1 -0
  328. package/dist/es5/xlsx/xform/style/underline-xform.js +46 -0
  329. package/dist/es5/xlsx/xform/style/underline-xform.js.map +1 -0
  330. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +75 -0
  331. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -0
  332. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +30 -0
  333. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +1 -0
  334. package/dist/es5/xlsx/xform/table/filter-column-xform.js +89 -0
  335. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -0
  336. package/dist/es5/xlsx/xform/table/filter-xform.js +28 -0
  337. package/dist/es5/xlsx/xform/table/filter-xform.js.map +1 -0
  338. package/dist/es5/xlsx/xform/table/table-column-xform.js +42 -0
  339. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +1 -0
  340. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +40 -0
  341. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +1 -0
  342. package/dist/es5/xlsx/xform/table/table-xform.js +122 -0
  343. package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
  344. package/dist/es5/xlsx/xlsx.js +775 -0
  345. package/dist/es5/xlsx/xlsx.js.map +1 -0
  346. package/dist/es5/xlsx/xml/theme1.js +5 -0
  347. package/dist/es5/xlsx/xml/theme1.js.map +1 -0
  348. package/dist/exceljs.bare.js +57759 -0
  349. package/dist/exceljs.bare.js.map +777 -0
  350. package/dist/exceljs.bare.min.js +45 -0
  351. package/dist/exceljs.bare.min.js.map +1 -0
  352. package/dist/exceljs.js +62398 -0
  353. package/dist/exceljs.js.map +1095 -0
  354. package/dist/exceljs.min.js +45 -0
  355. package/dist/exceljs.min.js.map +1 -0
  356. package/excel.js +13 -0
  357. package/index.d.ts +2040 -0
  358. package/index.ts +2 -0
  359. package/lib/csv/csv.js +191 -0
  360. package/lib/csv/line-buffer.js +74 -0
  361. package/lib/csv/stream-converter.js +135 -0
  362. package/lib/doc/anchor.js +91 -0
  363. package/lib/doc/cell.js +1124 -0
  364. package/lib/doc/column.js +320 -0
  365. package/lib/doc/data/theme1.json +234 -0
  366. package/lib/doc/data-validations.js +19 -0
  367. package/lib/doc/defined-names.js +196 -0
  368. package/lib/doc/enums.js +48 -0
  369. package/lib/doc/image.js +59 -0
  370. package/lib/doc/modelcontainer.js +18 -0
  371. package/lib/doc/note.js +65 -0
  372. package/lib/doc/pivot-table.js +132 -0
  373. package/lib/doc/range.js +257 -0
  374. package/lib/doc/row.js +415 -0
  375. package/lib/doc/table.js +465 -0
  376. package/lib/doc/workbook.js +224 -0
  377. package/lib/doc/worksheet.js +949 -0
  378. package/lib/exceljs.bare.js +13 -0
  379. package/lib/exceljs.browser.js +36 -0
  380. package/lib/exceljs.nodejs.js +14 -0
  381. package/lib/stream/xlsx/hyperlink-reader.js +83 -0
  382. package/lib/stream/xlsx/sheet-comments-writer.js +121 -0
  383. package/lib/stream/xlsx/sheet-rels-writer.js +119 -0
  384. package/lib/stream/xlsx/workbook-reader.js +337 -0
  385. package/lib/stream/xlsx/workbook-writer.js +347 -0
  386. package/lib/stream/xlsx/worksheet-reader.js +374 -0
  387. package/lib/stream/xlsx/worksheet-writer.js +717 -0
  388. package/lib/utils/auto-drain.js +15 -0
  389. package/lib/utils/browser-buffer-decode.js +14 -0
  390. package/lib/utils/browser-buffer-encode.js +15 -0
  391. package/lib/utils/cell-matrix.js +165 -0
  392. package/lib/utils/col-cache.js +287 -0
  393. package/lib/utils/copy-style.js +43 -0
  394. package/lib/utils/encryptor.js +55 -0
  395. package/lib/utils/iterate-stream.js +48 -0
  396. package/lib/utils/parse-sax.js +30 -0
  397. package/lib/utils/shared-formula.js +44 -0
  398. package/lib/utils/shared-strings.js +35 -0
  399. package/lib/utils/stream-base64.js +72 -0
  400. package/lib/utils/stream-buf.js +364 -0
  401. package/lib/utils/string-buf.js +82 -0
  402. package/lib/utils/string-builder.js +35 -0
  403. package/lib/utils/stuttered-pipe.js +67 -0
  404. package/lib/utils/typed-stack.js +24 -0
  405. package/lib/utils/under-dash.js +184 -0
  406. package/lib/utils/utils.js +205 -0
  407. package/lib/utils/xml-stream.js +169 -0
  408. package/lib/utils/zip-stream.js +87 -0
  409. package/lib/xlsx/.rels +11 -0
  410. package/lib/xlsx/calcChain.xml +6 -0
  411. package/lib/xlsx/core.xml +7 -0
  412. package/lib/xlsx/defaultnumformats.js +153 -0
  413. package/lib/xlsx/rel-type.js +20 -0
  414. package/lib/xlsx/styles.xml +41 -0
  415. package/lib/xlsx/workbook.xml +16 -0
  416. package/lib/xlsx/xform/base-xform.js +145 -0
  417. package/lib/xlsx/xform/book/defined-name-xform.js +91 -0
  418. package/lib/xlsx/xform/book/sheet-xform.js +34 -0
  419. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -0
  420. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -0
  421. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -0
  422. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -0
  423. package/lib/xlsx/xform/book/workbook-xform.js +259 -0
  424. package/lib/xlsx/xform/comment/comment-xform.js +105 -0
  425. package/lib/xlsx/xform/comment/comments-xform.js +82 -0
  426. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -0
  427. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -0
  428. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -0
  429. package/lib/xlsx/xform/comment/vml-client-data-xform.js +95 -0
  430. package/lib/xlsx/xform/comment/vml-notes-xform.js +107 -0
  431. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -0
  432. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -0
  433. package/lib/xlsx/xform/composite-xform.js +56 -0
  434. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -0
  435. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -0
  436. package/lib/xlsx/xform/core/app-xform.js +100 -0
  437. package/lib/xlsx/xform/core/content-types-xform.js +135 -0
  438. package/lib/xlsx/xform/core/core-xform.js +136 -0
  439. package/lib/xlsx/xform/core/relationship-xform.js +25 -0
  440. package/lib/xlsx/xform/core/relationships-xform.js +73 -0
  441. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -0
  442. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -0
  443. package/lib/xlsx/xform/drawing/blip-xform.js +42 -0
  444. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -0
  445. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -0
  446. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -0
  447. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -0
  448. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -0
  449. package/lib/xlsx/xform/drawing/ext-xform.js +44 -0
  450. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -0
  451. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -0
  452. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  453. package/lib/xlsx/xform/drawing/pic-xform.js +77 -0
  454. package/lib/xlsx/xform/drawing/sp-pr.js +17 -0
  455. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  456. package/lib/xlsx/xform/list-xform.js +95 -0
  457. package/lib/xlsx/xform/pivot-table/cache-field.js +43 -0
  458. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -0
  459. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +103 -0
  460. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +189 -0
  461. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -0
  462. package/lib/xlsx/xform/sheet/cell-xform.js +498 -0
  463. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +301 -0
  464. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -0
  465. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -0
  466. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -0
  467. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -0
  468. package/lib/xlsx/xform/sheet/cf/databar-xform.js +49 -0
  469. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -0
  470. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -0
  471. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -0
  472. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -0
  473. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -0
  474. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -0
  475. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -0
  476. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -0
  477. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +98 -0
  478. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -0
  479. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -0
  480. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -0
  481. package/lib/xlsx/xform/sheet/col-xform.js +86 -0
  482. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -0
  483. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -0
  484. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -0
  485. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -0
  486. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -0
  487. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -0
  488. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -0
  489. package/lib/xlsx/xform/sheet/merges.js +56 -0
  490. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -0
  491. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -0
  492. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -0
  493. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -0
  494. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -0
  495. package/lib/xlsx/xform/sheet/picture-xform.js +33 -0
  496. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -0
  497. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -0
  498. package/lib/xlsx/xform/sheet/row-xform.js +142 -0
  499. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +55 -0
  500. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -0
  501. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -0
  502. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -0
  503. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -0
  504. package/lib/xlsx/xform/sheet/worksheet-xform.js +548 -0
  505. package/lib/xlsx/xform/simple/boolean-xform.js +31 -0
  506. package/lib/xlsx/xform/simple/date-xform.js +66 -0
  507. package/lib/xlsx/xform/simple/float-xform.js +51 -0
  508. package/lib/xlsx/xform/simple/integer-xform.js +57 -0
  509. package/lib/xlsx/xform/simple/string-xform.js +51 -0
  510. package/lib/xlsx/xform/static-xform.js +64 -0
  511. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  512. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -0
  513. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -0
  514. package/lib/xlsx/xform/strings/shared-strings-xform.js +127 -0
  515. package/lib/xlsx/xform/strings/text-xform.js +44 -0
  516. package/lib/xlsx/xform/style/alignment-xform.js +172 -0
  517. package/lib/xlsx/xform/style/border-xform.js +207 -0
  518. package/lib/xlsx/xform/style/color-xform.js +63 -0
  519. package/lib/xlsx/xform/style/dxf-xform.js +111 -0
  520. package/lib/xlsx/xform/style/fill-xform.js +364 -0
  521. package/lib/xlsx/xform/style/font-xform.js +102 -0
  522. package/lib/xlsx/xform/style/numfmt-xform.js +63 -0
  523. package/lib/xlsx/xform/style/protection-xform.js +60 -0
  524. package/lib/xlsx/xform/style/style-xform.js +125 -0
  525. package/lib/xlsx/xform/style/styles-xform.js +527 -0
  526. package/lib/xlsx/xform/style/underline-xform.js +47 -0
  527. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -0
  528. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -0
  529. package/lib/xlsx/xform/table/filter-column-xform.js +96 -0
  530. package/lib/xlsx/xform/table/filter-xform.js +31 -0
  531. package/lib/xlsx/xform/table/table-column-xform.js +44 -0
  532. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -0
  533. package/lib/xlsx/xform/table/table-xform.js +131 -0
  534. package/lib/xlsx/xlsx.js +774 -0
  535. package/lib/xlsx/xml/theme1.js +3 -0
  536. package/lib/xlsx/xml/theme1.xml +318 -0
  537. package/package.json +149 -0
@@ -0,0 +1,775 @@
1
+ "use strict";
2
+
3
+ const fs = require('fs');
4
+ const JSZip = require('jszip');
5
+ const {
6
+ PassThrough
7
+ } = require('readable-stream');
8
+ const ZipStream = require('../utils/zip-stream');
9
+ const StreamBuf = require('../utils/stream-buf');
10
+ const utils = require('../utils/utils');
11
+ const XmlStream = require('../utils/xml-stream');
12
+ const {
13
+ bufferToString
14
+ } = require('../utils/browser-buffer-decode');
15
+ const StylesXform = require('./xform/style/styles-xform');
16
+ const CoreXform = require('./xform/core/core-xform');
17
+ const SharedStringsXform = require('./xform/strings/shared-strings-xform');
18
+ const RelationshipsXform = require('./xform/core/relationships-xform');
19
+ const ContentTypesXform = require('./xform/core/content-types-xform');
20
+ const AppXform = require('./xform/core/app-xform');
21
+ const WorkbookXform = require('./xform/book/workbook-xform');
22
+ const WorksheetXform = require('./xform/sheet/worksheet-xform');
23
+ const DrawingXform = require('./xform/drawing/drawing-xform');
24
+ const TableXform = require('./xform/table/table-xform');
25
+ const PivotCacheRecordsXform = require('./xform/pivot-table/pivot-cache-records-xform');
26
+ const PivotCacheDefinitionXform = require('./xform/pivot-table/pivot-cache-definition-xform');
27
+ const PivotTableXform = require('./xform/pivot-table/pivot-table-xform');
28
+ const CommentsXform = require('./xform/comment/comments-xform');
29
+ const VmlNotesXform = require('./xform/comment/vml-notes-xform');
30
+ const theme1Xml = require('./xml/theme1');
31
+ function fsReadFileAsync(filename, options) {
32
+ return new Promise((resolve, reject) => {
33
+ fs.readFile(filename, options, (error, data) => {
34
+ if (error) {
35
+ reject(error);
36
+ } else {
37
+ resolve(data);
38
+ }
39
+ });
40
+ });
41
+ }
42
+ class XLSX {
43
+ constructor(workbook) {
44
+ this.workbook = workbook;
45
+ }
46
+
47
+ // ===============================================================================
48
+ // Workbook
49
+ // =========================================================================
50
+ // Read
51
+
52
+ async readFile(filename, options) {
53
+ if (!(await utils.fs.exists(filename))) {
54
+ throw new Error(`File not found: ${filename}`);
55
+ }
56
+ const stream = fs.createReadStream(filename);
57
+ try {
58
+ const workbook = await this.read(stream, options);
59
+ stream.close();
60
+ return workbook;
61
+ } catch (error) {
62
+ stream.close();
63
+ throw error;
64
+ }
65
+ }
66
+ parseRels(stream) {
67
+ const xform = new RelationshipsXform();
68
+ return xform.parseStream(stream);
69
+ }
70
+ parseWorkbook(stream) {
71
+ const xform = new WorkbookXform();
72
+ return xform.parseStream(stream);
73
+ }
74
+ parseSharedStrings(stream) {
75
+ const xform = new SharedStringsXform();
76
+ return xform.parseStream(stream);
77
+ }
78
+ reconcile(model, options) {
79
+ const workbookXform = new WorkbookXform();
80
+ const worksheetXform = new WorksheetXform(options);
81
+ const drawingXform = new DrawingXform();
82
+ const tableXform = new TableXform();
83
+ workbookXform.reconcile(model);
84
+
85
+ // reconcile drawings with their rels
86
+ const drawingOptions = {
87
+ media: model.media,
88
+ mediaIndex: model.mediaIndex
89
+ };
90
+ Object.keys(model.drawings).forEach(name => {
91
+ const drawing = model.drawings[name];
92
+ const drawingRel = model.drawingRels[name];
93
+ if (drawingRel) {
94
+ drawingOptions.rels = drawingRel.reduce((o, rel) => {
95
+ o[rel.Id] = rel;
96
+ return o;
97
+ }, {});
98
+ (drawing.anchors || []).forEach(anchor => {
99
+ const hyperlinks = anchor.picture && anchor.picture.hyperlinks;
100
+ if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {
101
+ hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;
102
+ delete hyperlinks.rId;
103
+ }
104
+ });
105
+ drawingXform.reconcile(drawing, drawingOptions);
106
+ }
107
+ });
108
+
109
+ // reconcile tables with the default styles
110
+ const tableOptions = {
111
+ styles: model.styles
112
+ };
113
+ Object.values(model.tables).forEach(table => {
114
+ tableXform.reconcile(table, tableOptions);
115
+ });
116
+ const sheetOptions = {
117
+ styles: model.styles,
118
+ sharedStrings: model.sharedStrings,
119
+ media: model.media,
120
+ mediaIndex: model.mediaIndex,
121
+ date1904: model.properties && model.properties.date1904,
122
+ drawings: model.drawings,
123
+ comments: model.comments,
124
+ tables: model.tables,
125
+ vmlDrawings: model.vmlDrawings
126
+ };
127
+ model.worksheets.forEach(worksheet => {
128
+ worksheet.relationships = model.worksheetRels[worksheet.sheetNo];
129
+ worksheetXform.reconcile(worksheet, sheetOptions);
130
+ });
131
+
132
+ // delete unnecessary parts
133
+ delete model.worksheetHash;
134
+ delete model.worksheetRels;
135
+ delete model.globalRels;
136
+ delete model.sharedStrings;
137
+ delete model.workbookRels;
138
+ delete model.sheetDefs;
139
+ delete model.styles;
140
+ delete model.mediaIndex;
141
+ delete model.drawings;
142
+ delete model.drawingRels;
143
+ delete model.vmlDrawings;
144
+ }
145
+ async _processWorksheetEntry(stream, model, sheetNo, options, path) {
146
+ const xform = new WorksheetXform(options);
147
+ const worksheet = await xform.parseStream(stream);
148
+ worksheet.sheetNo = sheetNo;
149
+ model.worksheetHash[path] = worksheet;
150
+ model.worksheets.push(worksheet);
151
+ }
152
+ async _processCommentEntry(stream, model, name) {
153
+ const xform = new CommentsXform();
154
+ const comments = await xform.parseStream(stream);
155
+ model.comments[`../${name}.xml`] = comments;
156
+ }
157
+ async _processTableEntry(stream, model, name) {
158
+ const xform = new TableXform();
159
+ const table = await xform.parseStream(stream);
160
+ model.tables[`../tables/${name}.xml`] = table;
161
+ }
162
+ async _processWorksheetRelsEntry(stream, model, sheetNo) {
163
+ const xform = new RelationshipsXform();
164
+ const relationships = await xform.parseStream(stream);
165
+ model.worksheetRels[sheetNo] = relationships;
166
+ }
167
+ async _processMediaEntry(entry, model, filename) {
168
+ const lastDot = filename.lastIndexOf('.');
169
+ // if we can't determine extension, ignore it
170
+ if (lastDot >= 1) {
171
+ const extension = filename.substr(lastDot + 1);
172
+ const name = filename.substr(0, lastDot);
173
+ await new Promise((resolve, reject) => {
174
+ const streamBuf = new StreamBuf();
175
+ streamBuf.on('finish', () => {
176
+ model.mediaIndex[filename] = model.media.length;
177
+ model.mediaIndex[name] = model.media.length;
178
+ const medium = {
179
+ type: 'image',
180
+ name,
181
+ extension,
182
+ buffer: streamBuf.toBuffer()
183
+ };
184
+ model.media.push(medium);
185
+ resolve();
186
+ });
187
+ entry.on('error', error => {
188
+ reject(error);
189
+ });
190
+ entry.pipe(streamBuf);
191
+ });
192
+ }
193
+ }
194
+ async _processDrawingEntry(entry, model, name) {
195
+ const xform = new DrawingXform();
196
+ const drawing = await xform.parseStream(entry);
197
+ model.drawings[name] = drawing;
198
+ }
199
+ async _processDrawingRelsEntry(entry, model, name) {
200
+ const xform = new RelationshipsXform();
201
+ const relationships = await xform.parseStream(entry);
202
+ model.drawingRels[name] = relationships;
203
+ }
204
+ async _processVmlDrawingEntry(entry, model, name) {
205
+ const xform = new VmlNotesXform();
206
+ const vmlDrawing = await xform.parseStream(entry);
207
+ model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;
208
+ }
209
+ async _processThemeEntry(entry, model, name) {
210
+ await new Promise((resolve, reject) => {
211
+ // TODO: stream entry into buffer and store the xml in the model.themes[]
212
+ const stream = new StreamBuf();
213
+ entry.on('error', reject);
214
+ stream.on('error', reject);
215
+ stream.on('finish', () => {
216
+ model.themes[name] = stream.read().toString();
217
+ resolve();
218
+ });
219
+ entry.pipe(stream);
220
+ });
221
+ }
222
+
223
+ /**
224
+ * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md
225
+ */
226
+ createInputStream() {
227
+ throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md');
228
+ }
229
+ async read(stream, options) {
230
+ // TODO: Remove once node v8 is deprecated
231
+ // Detect and upgrade old streams
232
+ if (!stream[Symbol.asyncIterator] && stream.pipe) {
233
+ stream = stream.pipe(new PassThrough());
234
+ }
235
+ const chunks = [];
236
+ for await (const chunk of stream) {
237
+ chunks.push(chunk);
238
+ }
239
+ return this.load(Buffer.concat(chunks), options);
240
+ }
241
+ async load(data, options) {
242
+ let buffer;
243
+ if (options && options.base64) {
244
+ buffer = Buffer.from(data.toString(), 'base64');
245
+ } else {
246
+ buffer = data;
247
+ }
248
+ const model = {
249
+ worksheets: [],
250
+ worksheetHash: {},
251
+ worksheetRels: [],
252
+ themes: {},
253
+ media: [],
254
+ mediaIndex: {},
255
+ drawings: {},
256
+ drawingRels: {},
257
+ comments: {},
258
+ tables: {},
259
+ vmlDrawings: {}
260
+ };
261
+ const zip = await JSZip.loadAsync(buffer);
262
+ for (const entry of Object.values(zip.files)) {
263
+ /* eslint-disable no-await-in-loop */
264
+ if (!entry.dir) {
265
+ let entryName = entry.name;
266
+ if (entryName[0] === '/') {
267
+ entryName = entryName.substr(1);
268
+ }
269
+ let stream;
270
+ if (entryName.match(/xl\/media\//) ||
271
+ // themes are not parsed as stream
272
+ entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/)) {
273
+ stream = new PassThrough();
274
+ stream.write(await entry.async('nodebuffer'));
275
+ } else {
276
+ // use object mode to avoid buffer-string convention
277
+ stream = new PassThrough({
278
+ writableObjectMode: true,
279
+ readableObjectMode: true
280
+ });
281
+ let content;
282
+ // https://www.npmjs.com/package/process
283
+ if (process.browser) {
284
+ // running in browser, use TextDecoder if possible
285
+ content = bufferToString(await entry.async('nodebuffer'));
286
+ } else {
287
+ // running in node.js
288
+ content = await entry.async('string');
289
+ }
290
+ const chunkSize = 16 * 1024;
291
+ for (let i = 0; i < content.length; i += chunkSize) {
292
+ stream.write(content.substring(i, i + chunkSize));
293
+ }
294
+ }
295
+ stream.end();
296
+ switch (entryName) {
297
+ case '_rels/.rels':
298
+ model.globalRels = await this.parseRels(stream);
299
+ break;
300
+ case 'xl/workbook.xml':
301
+ {
302
+ const workbook = await this.parseWorkbook(stream);
303
+ model.sheets = workbook.sheets;
304
+ model.definedNames = workbook.definedNames;
305
+ model.views = workbook.views;
306
+ model.properties = workbook.properties;
307
+ model.calcProperties = workbook.calcProperties;
308
+ break;
309
+ }
310
+ case 'xl/_rels/workbook.xml.rels':
311
+ model.workbookRels = await this.parseRels(stream);
312
+ break;
313
+ case 'xl/sharedStrings.xml':
314
+ model.sharedStrings = new SharedStringsXform();
315
+ await model.sharedStrings.parseStream(stream);
316
+ break;
317
+ case 'xl/styles.xml':
318
+ model.styles = new StylesXform();
319
+ await model.styles.parseStream(stream);
320
+ break;
321
+ case 'docProps/app.xml':
322
+ {
323
+ const appXform = new AppXform();
324
+ const appProperties = await appXform.parseStream(stream);
325
+ model.company = appProperties.company;
326
+ model.manager = appProperties.manager;
327
+ break;
328
+ }
329
+ case 'docProps/core.xml':
330
+ {
331
+ const coreXform = new CoreXform();
332
+ const coreProperties = await coreXform.parseStream(stream);
333
+ Object.assign(model, coreProperties);
334
+ break;
335
+ }
336
+ default:
337
+ {
338
+ let match = entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/);
339
+ if (match) {
340
+ await this._processWorksheetEntry(stream, model, match[1], options, entryName);
341
+ break;
342
+ }
343
+ match = entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/);
344
+ if (match) {
345
+ await this._processWorksheetRelsEntry(stream, model, match[1]);
346
+ break;
347
+ }
348
+ match = entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/);
349
+ if (match) {
350
+ await this._processThemeEntry(stream, model, match[1]);
351
+ break;
352
+ }
353
+ match = entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);
354
+ if (match) {
355
+ await this._processMediaEntry(stream, model, match[1]);
356
+ break;
357
+ }
358
+ match = entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/);
359
+ if (match) {
360
+ await this._processDrawingEntry(stream, model, match[1]);
361
+ break;
362
+ }
363
+ match = entryName.match(/xl\/(comments\d+)[.]xml/);
364
+ if (match) {
365
+ await this._processCommentEntry(stream, model, match[1]);
366
+ break;
367
+ }
368
+ match = entryName.match(/xl\/tables\/(table\d+)[.]xml/);
369
+ if (match) {
370
+ await this._processTableEntry(stream, model, match[1]);
371
+ break;
372
+ }
373
+ match = entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/);
374
+ if (match) {
375
+ await this._processDrawingRelsEntry(stream, model, match[1]);
376
+ break;
377
+ }
378
+ match = entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/);
379
+ if (match) {
380
+ await this._processVmlDrawingEntry(stream, model, match[1]);
381
+ break;
382
+ }
383
+ }
384
+ }
385
+ }
386
+ }
387
+ this.reconcile(model, options);
388
+
389
+ // apply model
390
+ this.workbook.model = model;
391
+ return this.workbook;
392
+ }
393
+
394
+ // =========================================================================
395
+ // Write
396
+
397
+ async addMedia(zip, model) {
398
+ await Promise.all(model.media.map(async medium => {
399
+ if (medium.type === 'image') {
400
+ const filename = `xl/media/${medium.name}.${medium.extension}`;
401
+ if (medium.filename) {
402
+ const data = await fsReadFileAsync(medium.filename);
403
+ return zip.append(data, {
404
+ name: filename
405
+ });
406
+ }
407
+ if (medium.buffer) {
408
+ return zip.append(medium.buffer, {
409
+ name: filename
410
+ });
411
+ }
412
+ if (medium.base64) {
413
+ const dataimg64 = medium.base64;
414
+ const content = dataimg64.substring(dataimg64.indexOf(',') + 1);
415
+ return zip.append(content, {
416
+ name: filename,
417
+ base64: true
418
+ });
419
+ }
420
+ }
421
+ throw new Error('Unsupported media');
422
+ }));
423
+ }
424
+ addDrawings(zip, model) {
425
+ const drawingXform = new DrawingXform();
426
+ const relsXform = new RelationshipsXform();
427
+ model.worksheets.forEach(worksheet => {
428
+ const {
429
+ drawing
430
+ } = worksheet;
431
+ if (drawing) {
432
+ drawingXform.prepare(drawing, {});
433
+ let xml = drawingXform.toXml(drawing);
434
+ zip.append(xml, {
435
+ name: `xl/drawings/${drawing.name}.xml`
436
+ });
437
+ xml = relsXform.toXml(drawing.rels);
438
+ zip.append(xml, {
439
+ name: `xl/drawings/_rels/${drawing.name}.xml.rels`
440
+ });
441
+ }
442
+ });
443
+ }
444
+ addTables(zip, model) {
445
+ const tableXform = new TableXform();
446
+ model.worksheets.forEach(worksheet => {
447
+ const {
448
+ tables
449
+ } = worksheet;
450
+ tables.forEach(table => {
451
+ tableXform.prepare(table, {});
452
+ const tableXml = tableXform.toXml(table);
453
+ zip.append(tableXml, {
454
+ name: `xl/tables/${table.target}`
455
+ });
456
+ });
457
+ });
458
+ }
459
+ addPivotTables(zip, model) {
460
+ if (!model.pivotTables.length) return;
461
+ const pivotTable = model.pivotTables[0];
462
+ const pivotCacheRecordsXform = new PivotCacheRecordsXform();
463
+ const pivotCacheDefinitionXform = new PivotCacheDefinitionXform();
464
+ const pivotTableXform = new PivotTableXform();
465
+ const relsXform = new RelationshipsXform();
466
+
467
+ // pivot cache records
468
+ // --------------------------------------------------
469
+ // copy of the source data.
470
+ //
471
+ // Note: cells in the columns of the source data which are part
472
+ // of the "rows" or "columns" of the pivot table configuration are
473
+ // replaced by references to their __cache field__ identifiers.
474
+ // See "pivot cache definition" below.
475
+
476
+ let xml = pivotCacheRecordsXform.toXml(pivotTable);
477
+ zip.append(xml, {
478
+ name: 'xl/pivotCache/pivotCacheRecords1.xml'
479
+ });
480
+
481
+ // pivot cache definition
482
+ // --------------------------------------------------
483
+ // cache source (source data):
484
+ // ref="A1:E7" on sheet="Sheet1"
485
+ // cache fields:
486
+ // - 0: "A" (a1, a2, a3)
487
+ // - 1: "B" (b1, b2)
488
+ // - ...
489
+
490
+ xml = pivotCacheDefinitionXform.toXml(pivotTable);
491
+ zip.append(xml, {
492
+ name: 'xl/pivotCache/pivotCacheDefinition1.xml'
493
+ });
494
+ xml = relsXform.toXml([{
495
+ Id: 'rId1',
496
+ Type: XLSX.RelType.PivotCacheRecords,
497
+ Target: 'pivotCacheRecords1.xml'
498
+ }]);
499
+ zip.append(xml, {
500
+ name: 'xl/pivotCache/_rels/pivotCacheDefinition1.xml.rels'
501
+ });
502
+
503
+ // pivot tables (on destination worksheet)
504
+ // --------------------------------------------------
505
+ // location: ref="A3:E15"
506
+ // pivotFields
507
+ // rowFields and rowItems
508
+ // colFields and colItems
509
+ // dataFields
510
+ // pivotTableStyleInfo
511
+
512
+ xml = pivotTableXform.toXml(pivotTable);
513
+ zip.append(xml, {
514
+ name: 'xl/pivotTables/pivotTable1.xml'
515
+ });
516
+ xml = relsXform.toXml([{
517
+ Id: 'rId1',
518
+ Type: XLSX.RelType.PivotCacheDefinition,
519
+ Target: '../pivotCache/pivotCacheDefinition1.xml'
520
+ }]);
521
+ zip.append(xml, {
522
+ name: 'xl/pivotTables/_rels/pivotTable1.xml.rels'
523
+ });
524
+ }
525
+ async addContentTypes(zip, model) {
526
+ const xform = new ContentTypesXform();
527
+ const xml = xform.toXml(model);
528
+ zip.append(xml, {
529
+ name: '[Content_Types].xml'
530
+ });
531
+ }
532
+ async addApp(zip, model) {
533
+ const xform = new AppXform();
534
+ const xml = xform.toXml(model);
535
+ zip.append(xml, {
536
+ name: 'docProps/app.xml'
537
+ });
538
+ }
539
+ async addCore(zip, model) {
540
+ const coreXform = new CoreXform();
541
+ zip.append(coreXform.toXml(model), {
542
+ name: 'docProps/core.xml'
543
+ });
544
+ }
545
+ async addThemes(zip, model) {
546
+ const themes = model.themes || {
547
+ theme1: theme1Xml
548
+ };
549
+ Object.keys(themes).forEach(name => {
550
+ const xml = themes[name];
551
+ const path = `xl/theme/${name}.xml`;
552
+ zip.append(xml, {
553
+ name: path
554
+ });
555
+ });
556
+ }
557
+ async addOfficeRels(zip) {
558
+ const xform = new RelationshipsXform();
559
+ const xml = xform.toXml([{
560
+ Id: 'rId1',
561
+ Type: XLSX.RelType.OfficeDocument,
562
+ Target: 'xl/workbook.xml'
563
+ }, {
564
+ Id: 'rId2',
565
+ Type: XLSX.RelType.CoreProperties,
566
+ Target: 'docProps/core.xml'
567
+ }, {
568
+ Id: 'rId3',
569
+ Type: XLSX.RelType.ExtenderProperties,
570
+ Target: 'docProps/app.xml'
571
+ }]);
572
+ zip.append(xml, {
573
+ name: '_rels/.rels'
574
+ });
575
+ }
576
+ async addWorkbookRels(zip, model) {
577
+ let count = 1;
578
+ const relationships = [{
579
+ Id: `rId${count++}`,
580
+ Type: XLSX.RelType.Styles,
581
+ Target: 'styles.xml'
582
+ }, {
583
+ Id: `rId${count++}`,
584
+ Type: XLSX.RelType.Theme,
585
+ Target: 'theme/theme1.xml'
586
+ }];
587
+ if (model.sharedStrings.count) {
588
+ relationships.push({
589
+ Id: `rId${count++}`,
590
+ Type: XLSX.RelType.SharedStrings,
591
+ Target: 'sharedStrings.xml'
592
+ });
593
+ }
594
+ if ((model.pivotTables || []).length) {
595
+ const pivotTable = model.pivotTables[0];
596
+ pivotTable.rId = `rId${count++}`;
597
+ relationships.push({
598
+ Id: pivotTable.rId,
599
+ Type: XLSX.RelType.PivotCacheDefinition,
600
+ Target: 'pivotCache/pivotCacheDefinition1.xml'
601
+ });
602
+ }
603
+ model.worksheets.forEach(worksheet => {
604
+ worksheet.rId = `rId${count++}`;
605
+ relationships.push({
606
+ Id: worksheet.rId,
607
+ Type: XLSX.RelType.Worksheet,
608
+ Target: `worksheets/sheet${worksheet.id}.xml`
609
+ });
610
+ });
611
+ const xform = new RelationshipsXform();
612
+ const xml = xform.toXml(relationships);
613
+ zip.append(xml, {
614
+ name: 'xl/_rels/workbook.xml.rels'
615
+ });
616
+ }
617
+ async addSharedStrings(zip, model) {
618
+ if (model.sharedStrings && model.sharedStrings.count) {
619
+ zip.append(model.sharedStrings.xml, {
620
+ name: 'xl/sharedStrings.xml'
621
+ });
622
+ }
623
+ }
624
+ async addStyles(zip, model) {
625
+ const {
626
+ xml
627
+ } = model.styles;
628
+ if (xml) {
629
+ zip.append(xml, {
630
+ name: 'xl/styles.xml'
631
+ });
632
+ }
633
+ }
634
+ async addWorkbook(zip, model) {
635
+ const xform = new WorkbookXform();
636
+ zip.append(xform.toXml(model), {
637
+ name: 'xl/workbook.xml'
638
+ });
639
+ }
640
+ async addWorksheets(zip, model) {
641
+ // preparation phase
642
+ const worksheetXform = new WorksheetXform();
643
+ const relationshipsXform = new RelationshipsXform();
644
+ const commentsXform = new CommentsXform();
645
+ const vmlNotesXform = new VmlNotesXform();
646
+
647
+ // write sheets
648
+ model.worksheets.forEach(worksheet => {
649
+ let xmlStream = new XmlStream();
650
+ worksheetXform.render(xmlStream, worksheet);
651
+ zip.append(xmlStream.xml, {
652
+ name: `xl/worksheets/sheet${worksheet.id}.xml`
653
+ });
654
+ if (worksheet.rels && worksheet.rels.length) {
655
+ xmlStream = new XmlStream();
656
+ relationshipsXform.render(xmlStream, worksheet.rels);
657
+ zip.append(xmlStream.xml, {
658
+ name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`
659
+ });
660
+ }
661
+ if (worksheet.comments.length > 0) {
662
+ xmlStream = new XmlStream();
663
+ commentsXform.render(xmlStream, worksheet);
664
+ zip.append(xmlStream.xml, {
665
+ name: `xl/comments${worksheet.id}.xml`
666
+ });
667
+ xmlStream = new XmlStream();
668
+ vmlNotesXform.render(xmlStream, worksheet);
669
+ zip.append(xmlStream.xml, {
670
+ name: `xl/drawings/vmlDrawing${worksheet.id}.vml`
671
+ });
672
+ }
673
+ });
674
+ }
675
+ _finalize(zip) {
676
+ return new Promise((resolve, reject) => {
677
+ zip.on('finish', () => {
678
+ resolve(this);
679
+ });
680
+ zip.on('error', reject);
681
+ zip.finalize();
682
+ });
683
+ }
684
+ prepareModel(model, options) {
685
+ // ensure following properties have sane values
686
+ model.creator = model.creator || 'ExcelJS';
687
+ model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';
688
+ model.created = model.created || new Date();
689
+ model.modified = model.modified || new Date();
690
+ model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;
691
+ model.useStyles = options.useStyles !== undefined ? options.useStyles : true;
692
+
693
+ // Manage the shared strings
694
+ model.sharedStrings = new SharedStringsXform();
695
+
696
+ // add a style manager to handle cell formats, fonts, etc.
697
+ model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();
698
+
699
+ // prepare all of the things before the render
700
+ const workbookXform = new WorkbookXform();
701
+ const worksheetXform = new WorksheetXform();
702
+ workbookXform.prepare(model);
703
+ const worksheetOptions = {
704
+ sharedStrings: model.sharedStrings,
705
+ styles: model.styles,
706
+ date1904: model.properties.date1904,
707
+ drawingsCount: 0,
708
+ media: model.media
709
+ };
710
+ worksheetOptions.drawings = model.drawings = [];
711
+ worksheetOptions.commentRefs = model.commentRefs = [];
712
+ let tableCount = 0;
713
+ model.tables = [];
714
+ model.worksheets.forEach(worksheet => {
715
+ // assign unique filenames to tables
716
+ worksheet.tables.forEach(table => {
717
+ tableCount++;
718
+ table.target = `table${tableCount}.xml`;
719
+ table.id = tableCount;
720
+ model.tables.push(table);
721
+ });
722
+ worksheetXform.prepare(worksheet, worksheetOptions);
723
+ });
724
+
725
+ // TODO: workbook drawing list
726
+ }
727
+ async write(stream, options) {
728
+ options = options || {};
729
+ const {
730
+ model
731
+ } = this.workbook;
732
+ const zip = new ZipStream.ZipWriter(options.zip);
733
+ zip.pipe(stream);
734
+ this.prepareModel(model, options);
735
+
736
+ // render
737
+ await this.addContentTypes(zip, model);
738
+ await this.addOfficeRels(zip, model);
739
+ await this.addWorkbookRels(zip, model);
740
+ await this.addWorksheets(zip, model);
741
+ await this.addSharedStrings(zip, model); // always after worksheets
742
+ await this.addDrawings(zip, model);
743
+ await this.addTables(zip, model);
744
+ await this.addPivotTables(zip, model);
745
+ await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);
746
+ await this.addMedia(zip, model);
747
+ await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);
748
+ await this.addWorkbook(zip, model);
749
+ return this._finalize(zip);
750
+ }
751
+ writeFile(filename, options) {
752
+ const stream = fs.createWriteStream(filename);
753
+ return new Promise((resolve, reject) => {
754
+ stream.on('finish', () => {
755
+ resolve();
756
+ });
757
+ stream.on('error', error => {
758
+ reject(error);
759
+ });
760
+ this.write(stream, options).then(() => {
761
+ stream.end();
762
+ }).catch(err => {
763
+ reject(err);
764
+ });
765
+ });
766
+ }
767
+ async writeBuffer(options) {
768
+ const stream = new StreamBuf();
769
+ await this.write(stream, options);
770
+ return stream.read();
771
+ }
772
+ }
773
+ XLSX.RelType = require('./rel-type');
774
+ module.exports = XLSX;
775
+ //# sourceMappingURL=xlsx.js.map