@alienkarma/exceljs 4.4.0-fork.12 → 4.4.0-fork.13

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 (536) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +3024 -3024
  3. package/README_zh.md +2878 -2878
  4. package/excel.js +13 -13
  5. package/index.d.ts +2040 -2040
  6. package/lib/csv/csv.js +191 -191
  7. package/lib/csv/line-buffer.js +74 -74
  8. package/lib/csv/stream-converter.js +135 -135
  9. package/lib/doc/anchor.js +91 -91
  10. package/lib/doc/cell.js +1124 -1124
  11. package/lib/doc/column.js +320 -320
  12. package/lib/doc/data/theme1.json +234 -234
  13. package/lib/doc/data-validations.js +19 -19
  14. package/lib/doc/defined-names.js +196 -196
  15. package/lib/doc/enums.js +48 -48
  16. package/lib/doc/image.js +59 -59
  17. package/lib/doc/modelcontainer.js +18 -18
  18. package/lib/doc/note.js +65 -65
  19. package/lib/doc/pivot-table.js +132 -132
  20. package/lib/doc/range.js +257 -257
  21. package/lib/doc/row.js +415 -415
  22. package/lib/doc/table.js +465 -465
  23. package/lib/doc/workbook.js +224 -224
  24. package/lib/doc/worksheet.js +949 -949
  25. package/lib/exceljs.bare.js +13 -13
  26. package/lib/exceljs.browser.js +36 -36
  27. package/lib/exceljs.nodejs.js +14 -14
  28. package/lib/stream/xlsx/hyperlink-reader.js +83 -83
  29. package/lib/stream/xlsx/sheet-comments-writer.js +121 -121
  30. package/lib/stream/xlsx/sheet-rels-writer.js +119 -119
  31. package/lib/stream/xlsx/workbook-reader.js +337 -337
  32. package/lib/stream/xlsx/workbook-writer.js +372 -366
  33. package/lib/stream/xlsx/worksheet-reader.js +374 -374
  34. package/lib/stream/xlsx/worksheet-writer.js +717 -717
  35. package/lib/utils/auto-drain.js +15 -15
  36. package/lib/utils/browser-buffer-decode.js +14 -14
  37. package/lib/utils/browser-buffer-encode.js +15 -15
  38. package/lib/utils/cell-matrix.js +165 -165
  39. package/lib/utils/col-cache.js +287 -287
  40. package/lib/utils/copy-style.js +43 -43
  41. package/lib/utils/encryptor.js +55 -55
  42. package/lib/utils/iterate-stream.js +48 -48
  43. package/lib/utils/parse-sax.js +30 -30
  44. package/lib/utils/shared-formula.js +44 -44
  45. package/lib/utils/shared-strings.js +35 -35
  46. package/lib/utils/stream-base64.js +72 -72
  47. package/lib/utils/stream-buf.js +364 -364
  48. package/lib/utils/string-buf.js +82 -82
  49. package/lib/utils/string-builder.js +35 -35
  50. package/lib/utils/stuttered-pipe.js +67 -67
  51. package/lib/utils/typed-stack.js +24 -24
  52. package/lib/utils/under-dash.js +184 -184
  53. package/lib/utils/utils.js +205 -205
  54. package/lib/utils/xml-stream.js +169 -169
  55. package/lib/utils/zip-stream.js +87 -87
  56. package/lib/xlsx/.rels +10 -10
  57. package/lib/xlsx/calcChain.xml +5 -5
  58. package/lib/xlsx/core.xml +6 -6
  59. package/lib/xlsx/defaultnumformats.js +153 -153
  60. package/lib/xlsx/rel-type.js +20 -20
  61. package/lib/xlsx/styles.xml +40 -40
  62. package/lib/xlsx/workbook.xml +16 -16
  63. package/lib/xlsx/xform/base-xform.js +145 -145
  64. package/lib/xlsx/xform/book/defined-name-xform.js +91 -91
  65. package/lib/xlsx/xform/book/sheet-xform.js +34 -34
  66. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -26
  67. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -29
  68. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -29
  69. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -53
  70. package/lib/xlsx/xform/book/workbook-xform.js +259 -259
  71. package/lib/xlsx/xform/comment/comment-xform.js +105 -105
  72. package/lib/xlsx/xform/comment/comments-xform.js +82 -82
  73. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -39
  74. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -36
  75. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -60
  76. package/lib/xlsx/xform/comment/vml-client-data-xform.js +95 -95
  77. package/lib/xlsx/xform/comment/vml-notes-xform.js +107 -107
  78. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -95
  79. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -64
  80. package/lib/xlsx/xform/composite-xform.js +56 -56
  81. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -32
  82. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -28
  83. package/lib/xlsx/xform/core/app-xform.js +100 -100
  84. package/lib/xlsx/xform/core/content-types-xform.js +135 -135
  85. package/lib/xlsx/xform/core/core-xform.js +136 -136
  86. package/lib/xlsx/xform/core/relationship-xform.js +25 -25
  87. package/lib/xlsx/xform/core/relationships-xform.js +73 -73
  88. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -48
  89. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -71
  90. package/lib/xlsx/xform/drawing/blip-xform.js +42 -42
  91. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -38
  92. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -68
  93. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -77
  94. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -109
  95. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -43
  96. package/lib/xlsx/xform/drawing/ext-xform.js +44 -44
  97. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -41
  98. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -65
  99. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -63
  100. package/lib/xlsx/xform/drawing/pic-xform.js +77 -77
  101. package/lib/xlsx/xform/drawing/sp-pr.js +17 -17
  102. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -62
  103. package/lib/xlsx/xform/list-xform.js +95 -95
  104. package/lib/xlsx/xform/pivot-table/cache-field.js +43 -43
  105. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -77
  106. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +103 -103
  107. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +189 -189
  108. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -38
  109. package/lib/xlsx/xform/sheet/cell-xform.js +498 -498
  110. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +301 -301
  111. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -27
  112. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -45
  113. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -48
  114. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -92
  115. package/lib/xlsx/xform/sheet/cf/databar-xform.js +49 -49
  116. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -87
  117. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -25
  118. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -47
  119. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -27
  120. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -98
  121. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -43
  122. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -62
  123. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -50
  124. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +98 -98
  125. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -25
  126. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -73
  127. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -25
  128. package/lib/xlsx/xform/sheet/col-xform.js +86 -86
  129. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -257
  130. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -29
  131. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -33
  132. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -86
  133. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -146
  134. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -54
  135. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -27
  136. package/lib/xlsx/xform/sheet/merges.js +56 -56
  137. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -43
  138. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -27
  139. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -49
  140. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -35
  141. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -103
  142. package/lib/xlsx/xform/sheet/picture-xform.js +33 -33
  143. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -49
  144. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -39
  145. package/lib/xlsx/xform/sheet/row-xform.js +142 -142
  146. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +55 -55
  147. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -90
  148. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -89
  149. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -202
  150. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -33
  151. package/lib/xlsx/xform/sheet/worksheet-xform.js +548 -548
  152. package/lib/xlsx/xform/simple/boolean-xform.js +31 -31
  153. package/lib/xlsx/xform/simple/date-xform.js +66 -66
  154. package/lib/xlsx/xform/simple/float-xform.js +51 -51
  155. package/lib/xlsx/xform/simple/integer-xform.js +57 -57
  156. package/lib/xlsx/xform/simple/string-xform.js +51 -51
  157. package/lib/xlsx/xform/static-xform.js +64 -64
  158. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -98
  159. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -101
  160. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -102
  161. package/lib/xlsx/xform/strings/shared-strings-xform.js +127 -127
  162. package/lib/xlsx/xform/strings/text-xform.js +44 -44
  163. package/lib/xlsx/xform/style/alignment-xform.js +172 -172
  164. package/lib/xlsx/xform/style/border-xform.js +207 -207
  165. package/lib/xlsx/xform/style/color-xform.js +63 -63
  166. package/lib/xlsx/xform/style/dxf-xform.js +111 -111
  167. package/lib/xlsx/xform/style/fill-xform.js +364 -364
  168. package/lib/xlsx/xform/style/font-xform.js +102 -102
  169. package/lib/xlsx/xform/style/numfmt-xform.js +63 -63
  170. package/lib/xlsx/xform/style/protection-xform.js +60 -60
  171. package/lib/xlsx/xform/style/style-xform.js +125 -125
  172. package/lib/xlsx/xform/style/styles-xform.js +527 -527
  173. package/lib/xlsx/xform/style/underline-xform.js +47 -47
  174. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -81
  175. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -33
  176. package/lib/xlsx/xform/table/filter-column-xform.js +96 -96
  177. package/lib/xlsx/xform/table/filter-xform.js +31 -31
  178. package/lib/xlsx/xform/table/table-column-xform.js +44 -44
  179. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -41
  180. package/lib/xlsx/xform/table/table-xform.js +131 -131
  181. package/lib/xlsx/xlsx.js +774 -774
  182. package/lib/xlsx/xml/theme1.js +3 -3
  183. package/lib/xlsx/xml/theme1.xml +317 -317
  184. package/package.json +1 -1
  185. package/dist/LICENSE +0 -22
  186. package/dist/es5/csv/csv.js +0 -182
  187. package/dist/es5/csv/csv.js.map +0 -1
  188. package/dist/es5/csv/line-buffer.js +0 -68
  189. package/dist/es5/csv/line-buffer.js.map +0 -1
  190. package/dist/es5/csv/stream-converter.js +0 -110
  191. package/dist/es5/csv/stream-converter.js.map +0 -1
  192. package/dist/es5/doc/anchor.js +0 -73
  193. package/dist/es5/doc/anchor.js.map +0 -1
  194. package/dist/es5/doc/cell.js +0 -960
  195. package/dist/es5/doc/cell.js.map +0 -1
  196. package/dist/es5/doc/column.js +0 -274
  197. package/dist/es5/doc/column.js.map +0 -1
  198. package/dist/es5/doc/data-validations.js +0 -18
  199. package/dist/es5/doc/data-validations.js.map +0 -1
  200. package/dist/es5/doc/defined-names.js +0 -173
  201. package/dist/es5/doc/defined-names.js.map +0 -1
  202. package/dist/es5/doc/enums.js +0 -49
  203. package/dist/es5/doc/enums.js.map +0 -1
  204. package/dist/es5/doc/image.js +0 -69
  205. package/dist/es5/doc/image.js.map +0 -1
  206. package/dist/es5/doc/modelcontainer.js +0 -16
  207. package/dist/es5/doc/modelcontainer.js.map +0 -1
  208. package/dist/es5/doc/note.js +0 -64
  209. package/dist/es5/doc/note.js.map +0 -1
  210. package/dist/es5/doc/pivot-table.js +0 -137
  211. package/dist/es5/doc/pivot-table.js.map +0 -1
  212. package/dist/es5/doc/range.js +0 -229
  213. package/dist/es5/doc/range.js.map +0 -1
  214. package/dist/es5/doc/row.js +0 -382
  215. package/dist/es5/doc/row.js.map +0 -1
  216. package/dist/es5/doc/table.js +0 -441
  217. package/dist/es5/doc/table.js.map +0 -1
  218. package/dist/es5/doc/workbook.js +0 -205
  219. package/dist/es5/doc/workbook.js.map +0 -1
  220. package/dist/es5/doc/worksheet.js +0 -918
  221. package/dist/es5/doc/worksheet.js.map +0 -1
  222. package/dist/es5/exceljs.bare.js +0 -14
  223. package/dist/es5/exceljs.bare.js.map +0 -1
  224. package/dist/es5/exceljs.browser.js +0 -36
  225. package/dist/es5/exceljs.browser.js.map +0 -1
  226. package/dist/es5/exceljs.nodejs.js +0 -15
  227. package/dist/es5/exceljs.nodejs.js.map +0 -1
  228. package/dist/es5/index.js +0 -15
  229. package/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  230. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  231. package/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  232. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  233. package/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  234. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  235. package/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  236. package/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  237. package/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  238. package/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  239. package/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  240. package/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  241. package/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  242. package/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  243. package/dist/es5/utils/auto-drain.js +0 -18
  244. package/dist/es5/utils/auto-drain.js.map +0 -1
  245. package/dist/es5/utils/browser-buffer-decode.js +0 -15
  246. package/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  247. package/dist/es5/utils/browser-buffer-encode.js +0 -18
  248. package/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  249. package/dist/es5/utils/cell-matrix.js +0 -149
  250. package/dist/es5/utils/cell-matrix.js.map +0 -1
  251. package/dist/es5/utils/col-cache.js +0 -258
  252. package/dist/es5/utils/col-cache.js.map +0 -1
  253. package/dist/es5/utils/copy-style.js +0 -43
  254. package/dist/es5/utils/copy-style.js.map +0 -1
  255. package/dist/es5/utils/encryptor.js +0 -58
  256. package/dist/es5/utils/encryptor.js.map +0 -1
  257. package/dist/es5/utils/iterate-stream.js +0 -46
  258. package/dist/es5/utils/iterate-stream.js.map +0 -1
  259. package/dist/es5/utils/parse-sax.js +0 -47
  260. package/dist/es5/utils/parse-sax.js.map +0 -1
  261. package/dist/es5/utils/shared-formula.js +0 -42
  262. package/dist/es5/utils/shared-formula.js.map +0 -1
  263. package/dist/es5/utils/shared-strings.js +0 -32
  264. package/dist/es5/utils/shared-strings.js.map +0 -1
  265. package/dist/es5/utils/stream-base64.js +0 -66
  266. package/dist/es5/utils/stream-base64.js.map +0 -1
  267. package/dist/es5/utils/stream-buf.js +0 -343
  268. package/dist/es5/utils/stream-buf.js.map +0 -1
  269. package/dist/es5/utils/string-buf.js +0 -73
  270. package/dist/es5/utils/string-buf.js.map +0 -1
  271. package/dist/es5/utils/string-builder.js +0 -32
  272. package/dist/es5/utils/string-builder.js.map +0 -1
  273. package/dist/es5/utils/stuttered-pipe.js +0 -61
  274. package/dist/es5/utils/stuttered-pipe.js.map +0 -1
  275. package/dist/es5/utils/typed-stack.js +0 -23
  276. package/dist/es5/utils/typed-stack.js.map +0 -1
  277. package/dist/es5/utils/under-dash.js +0 -168
  278. package/dist/es5/utils/under-dash.js.map +0 -1
  279. package/dist/es5/utils/utils.js +0 -204
  280. package/dist/es5/utils/utils.js.map +0 -1
  281. package/dist/es5/utils/xml-stream.js +0 -151
  282. package/dist/es5/utils/xml-stream.js.map +0 -1
  283. package/dist/es5/utils/zip-stream.js +0 -79
  284. package/dist/es5/utils/zip-stream.js.map +0 -1
  285. package/dist/es5/xlsx/defaultnumformats.js +0 -230
  286. package/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  287. package/dist/es5/xlsx/rel-type.js +0 -21
  288. package/dist/es5/xlsx/rel-type.js.map +0 -1
  289. package/dist/es5/xlsx/xform/base-xform.js +0 -139
  290. package/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  291. package/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  292. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  293. package/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  294. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  295. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  296. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  297. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +0 -27
  298. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +0 -1
  299. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  300. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  301. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  302. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  303. package/dist/es5/xlsx/xform/book/workbook-xform.js +0 -241
  304. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  305. package/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  306. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  307. package/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  308. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  309. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  310. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  311. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  312. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  313. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  314. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  315. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  316. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  317. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  318. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  319. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  320. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  321. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  322. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  323. package/dist/es5/xlsx/xform/composite-xform.js +0 -51
  324. package/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  325. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  326. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  327. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  328. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  329. package/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  330. package/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  331. package/dist/es5/xlsx/xform/core/content-types-xform.js +0 -127
  332. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  333. package/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  334. package/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  335. package/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  336. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  337. package/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  338. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  339. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  340. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  341. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  342. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  343. package/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -39
  344. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  345. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  346. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  347. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  348. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  349. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  350. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  351. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  352. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  353. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  354. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  355. package/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  356. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  357. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  358. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  359. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  360. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  361. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  362. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  363. package/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  364. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  365. package/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  366. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  367. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  368. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  369. package/dist/es5/xlsx/xform/list-xform.js +0 -91
  370. package/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  371. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +0 -48
  372. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +0 -1
  373. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +0 -73
  374. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +0 -1
  375. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +0 -93
  376. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +0 -1
  377. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +0 -176
  378. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +0 -1
  379. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  380. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  381. package/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -450
  382. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  383. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  384. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  385. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  386. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  387. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  388. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  389. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  390. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  391. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  392. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  393. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  394. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  395. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  396. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  397. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  398. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  399. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  400. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  401. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  402. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  403. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  404. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  405. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  406. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  407. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  408. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  409. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  410. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  411. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  412. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  413. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  414. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  415. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  416. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  417. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  418. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  419. package/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  420. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  421. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  422. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  423. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  424. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  425. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  426. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  427. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  428. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  429. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  430. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  431. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  432. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  433. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  434. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  435. package/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  436. package/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  437. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  438. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  439. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  440. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  441. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  442. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  443. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  444. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  445. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  446. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  447. package/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  448. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  449. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  450. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  451. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  452. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  453. package/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  454. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  455. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  456. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  457. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  458. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  459. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  460. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  461. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  462. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  463. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  464. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  465. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -522
  466. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  467. package/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  468. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  469. package/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  470. package/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  471. package/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  472. package/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  473. package/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  474. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  475. package/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  476. package/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  477. package/dist/es5/xlsx/xform/static-xform.js +0 -61
  478. package/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  479. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  480. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  481. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  482. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  483. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  484. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  485. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  486. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  487. package/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  488. package/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  489. package/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  490. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  491. package/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  492. package/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  493. package/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  494. package/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  495. package/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  496. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  497. package/dist/es5/xlsx/xform/style/fill-xform.js +0 -307
  498. package/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  499. package/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  500. package/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  501. package/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -58
  502. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  503. package/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  504. package/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  505. package/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  506. package/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  507. package/dist/es5/xlsx/xform/style/styles-xform.js +0 -611
  508. package/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  509. package/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  510. package/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  511. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  512. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  513. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  514. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  515. package/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  516. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  517. package/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  518. package/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  519. package/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  520. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  521. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  522. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  523. package/dist/es5/xlsx/xform/table/table-xform.js +0 -122
  524. package/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  525. package/dist/es5/xlsx/xlsx.js +0 -775
  526. package/dist/es5/xlsx/xlsx.js.map +0 -1
  527. package/dist/es5/xlsx/xml/theme1.js +0 -5
  528. package/dist/es5/xlsx/xml/theme1.js.map +0 -1
  529. package/dist/exceljs.bare.js +0 -57759
  530. package/dist/exceljs.bare.js.map +0 -777
  531. package/dist/exceljs.bare.min.js +0 -45
  532. package/dist/exceljs.bare.min.js.map +0 -1
  533. package/dist/exceljs.js +0 -62398
  534. package/dist/exceljs.js.map +0 -1095
  535. package/dist/exceljs.min.js +0 -45
  536. package/dist/exceljs.min.js.map +0 -1
@@ -1,366 +1,372 @@
1
- const fs = require("fs");
2
- const { ZipArchive } = require("@alienkarma/archiver");
3
-
4
- const StreamBuf = require("../../utils/stream-buf");
5
-
6
- const RelType = require("../../xlsx/rel-type");
7
- const StylesXform = require("../../xlsx/xform/style/styles-xform");
8
- const SharedStrings = require("../../utils/shared-strings");
9
- const DefinedNames = require("../../doc/defined-names");
10
-
11
- const CoreXform = require("../../xlsx/xform/core/core-xform");
12
- const RelationshipsXform = require("../../xlsx/xform/core/relationships-xform");
13
- const ContentTypesXform = require("../../xlsx/xform/core/content-types-xform");
14
- const AppXform = require("../../xlsx/xform/core/app-xform");
15
- const WorkbookXform = require("../../xlsx/xform/book/workbook-xform");
16
- const SharedStringsXform = require("../../xlsx/xform/strings/shared-strings-xform");
17
-
18
- const WorksheetWriter = require("./worksheet-writer");
19
-
20
- const theme1Xml = require("../../xlsx/xml/theme1.js");
21
-
22
- class WorkbookWriter {
23
- constructor(options) {
24
- options = options || {};
25
-
26
- this.created = options.created || new Date();
27
- this.modified = options.modified || this.created;
28
- this.creator = options.creator || "ExcelJS";
29
- this.lastModifiedBy = options.lastModifiedBy || "ExcelJS";
30
- this.lastPrinted = options.lastPrinted;
31
-
32
- // using shared strings creates a smaller xlsx file but may use more memory
33
- this.useSharedStrings = options.useSharedStrings || false;
34
- this.sharedStrings = new SharedStrings();
35
-
36
- // style manager
37
- this.styles = options.useStyles
38
- ? new StylesXform(true)
39
- : new StylesXform.Mock(true);
40
-
41
- // defined names
42
- this._definedNames = new DefinedNames();
43
-
44
- this._worksheets = [];
45
- this.views = [];
46
-
47
- this.zipOptions = options.zip;
48
-
49
- this.media = [];
50
- this.commentRefs = [];
51
-
52
- this.zip = new ZipArchive(this.zipOptions);
53
- if (options.stream) {
54
- this.stream = options.stream;
55
- } else if (options.filename) {
56
- this.stream = fs.createWriteStream(options.filename);
57
- } else {
58
- this.stream = new StreamBuf();
59
- }
60
- this.zip.pipe(this.stream);
61
-
62
- // these bits can be added right now
63
- this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);
64
- }
65
-
66
- get definedNames() {
67
- return this._definedNames;
68
- }
69
-
70
- _openStream(path) {
71
- const stream = new StreamBuf({ bufSize: 65536, batch: true });
72
- this.zip.append(stream, { name: path });
73
- stream.on("finish", () => {
74
- stream.emit("zipped");
75
- });
76
- return stream;
77
- }
78
-
79
- _commitWorksheets() {
80
- const commitWorksheet = function (worksheet) {
81
- if (!worksheet.committed) {
82
- return new Promise((resolve) => {
83
- worksheet.stream.on("zipped", () => {
84
- resolve();
85
- });
86
- worksheet.commit();
87
- });
88
- }
89
- return Promise.resolve();
90
- };
91
- // if there are any uncommitted worksheets, commit them now and wait
92
- const promises = this._worksheets.map(commitWorksheet);
93
- if (promises.length) {
94
- return Promise.all(promises);
95
- }
96
- return Promise.resolve();
97
- }
98
-
99
- async commit() {
100
- // commit all worksheets, then add suplimentary files
101
- await this.promise;
102
- await this.addMedia();
103
- await this._commitWorksheets();
104
- await Promise.all([
105
- this.addContentTypes(),
106
- this.addApp(),
107
- this.addCore(),
108
- this.addSharedStrings(),
109
- this.addStyles(),
110
- this.addWorkbookRels(),
111
- ]);
112
- await this.addWorkbook();
113
- return this._finalize();
114
- }
115
-
116
- get nextId() {
117
- // find the next unique spot to add worksheet
118
- let i;
119
- for (i = 1; i < this._worksheets.length; i++) {
120
- if (!this._worksheets[i]) {
121
- return i;
122
- }
123
- }
124
- return this._worksheets.length || 1;
125
- }
126
-
127
- addImage(image) {
128
- const id = this.media.length;
129
- const medium = Object.assign({}, image, {
130
- type: "image",
131
- name: `image${id}.${image.extension}`,
132
- });
133
- this.media.push(medium);
134
- return id;
135
- }
136
-
137
- getImage(id) {
138
- return this.media[id];
139
- }
140
-
141
- addWorksheet(name, options) {
142
- // it's possible to add a worksheet with different than default
143
- // shared string handling
144
- // in fact, it's even possible to switch it mid-sheet
145
- options = options || {};
146
- const useSharedStrings =
147
- options.useSharedStrings !== undefined
148
- ? options.useSharedStrings
149
- : this.useSharedStrings;
150
-
151
- if (options.tabColor) {
152
- // eslint-disable-next-line no-console
153
- console.trace(
154
- "tabColor option has moved to { properties: tabColor: {...} }",
155
- );
156
- options.properties = Object.assign(
157
- {
158
- tabColor: options.tabColor,
159
- },
160
- options.properties,
161
- );
162
- }
163
-
164
- const id = this.nextId;
165
- name = name || `sheet${id}`;
166
-
167
- const worksheet = new WorksheetWriter({
168
- id,
169
- name,
170
- workbook: this,
171
- useSharedStrings,
172
- properties: options.properties,
173
- state: options.state,
174
- pageSetup: options.pageSetup,
175
- views: options.views,
176
- autoFilter: options.autoFilter,
177
- headerFooter: options.headerFooter,
178
- });
179
-
180
- this._worksheets[id] = worksheet;
181
- return worksheet;
182
- }
183
-
184
- getWorksheet(id) {
185
- if (id === undefined) {
186
- return this._worksheets.find(() => true);
187
- }
188
- if (typeof id === "number") {
189
- return this._worksheets[id];
190
- }
191
- if (typeof id === "string") {
192
- return this._worksheets.find(
193
- (worksheet) => worksheet && worksheet.name === id,
194
- );
195
- }
196
- return undefined;
197
- }
198
-
199
- addStyles() {
200
- return new Promise((resolve) => {
201
- this.zip.append(this.styles.xml, { name: "xl/styles.xml" });
202
- resolve();
203
- });
204
- }
205
-
206
- addThemes() {
207
- return new Promise((resolve) => {
208
- this.zip.append(theme1Xml, { name: "xl/theme/theme1.xml" });
209
- resolve();
210
- });
211
- }
212
-
213
- addOfficeRels() {
214
- return new Promise((resolve) => {
215
- const xform = new RelationshipsXform();
216
- const xml = xform.toXml([
217
- { Id: "rId1", Type: RelType.OfficeDocument, Target: "xl/workbook.xml" },
218
- {
219
- Id: "rId2",
220
- Type: RelType.CoreProperties,
221
- Target: "docProps/core.xml",
222
- },
223
- {
224
- Id: "rId3",
225
- Type: RelType.ExtenderProperties,
226
- Target: "docProps/app.xml",
227
- },
228
- ]);
229
- this.zip.append(xml, { name: "/_rels/.rels" });
230
- resolve();
231
- });
232
- }
233
-
234
- addContentTypes() {
235
- return new Promise((resolve) => {
236
- const model = {
237
- worksheets: this._worksheets.filter(Boolean),
238
- sharedStrings: this.sharedStrings,
239
- commentRefs: this.commentRefs,
240
- media: this.media,
241
- };
242
- const xform = new ContentTypesXform();
243
- const xml = xform.toXml(model);
244
- this.zip.append(xml, { name: "[Content_Types].xml" });
245
- resolve();
246
- });
247
- }
248
-
249
- addMedia() {
250
- return Promise.all(
251
- this.media.map((medium) => {
252
- if (medium.type === "image") {
253
- const filename = `xl/media/${medium.name}`;
254
- if (medium.filename) {
255
- return this.zip.file(medium.filename, { name: filename });
256
- }
257
- if (medium.buffer) {
258
- return this.zip.append(medium.buffer, { name: filename });
259
- }
260
- if (medium.base64) {
261
- const dataimg64 = medium.base64;
262
- const content = dataimg64.substring(dataimg64.indexOf(",") + 1);
263
- return this.zip.append(content, { name: filename, base64: true });
264
- }
265
- }
266
- throw new Error("Unsupported media");
267
- }),
268
- );
269
- }
270
-
271
- addApp() {
272
- return new Promise((resolve) => {
273
- const model = {
274
- worksheets: this._worksheets.filter(Boolean),
275
- };
276
- const xform = new AppXform();
277
- const xml = xform.toXml(model);
278
- this.zip.append(xml, { name: "docProps/app.xml" });
279
- resolve();
280
- });
281
- }
282
-
283
- addCore() {
284
- return new Promise((resolve) => {
285
- const coreXform = new CoreXform();
286
- const xml = coreXform.toXml(this);
287
- this.zip.append(xml, { name: "docProps/core.xml" });
288
- resolve();
289
- });
290
- }
291
-
292
- addSharedStrings() {
293
- if (this.sharedStrings.count) {
294
- return new Promise((resolve) => {
295
- const sharedStringsXform = new SharedStringsXform();
296
- const xml = sharedStringsXform.toXml(this.sharedStrings);
297
- this.zip.append(xml, { name: "/xl/sharedStrings.xml" });
298
- resolve();
299
- });
300
- }
301
- return Promise.resolve();
302
- }
303
-
304
- addWorkbookRels() {
305
- let count = 1;
306
- const relationships = [
307
- { Id: `rId${count++}`, Type: RelType.Styles, Target: "styles.xml" },
308
- { Id: `rId${count++}`, Type: RelType.Theme, Target: "theme/theme1.xml" },
309
- ];
310
- if (this.sharedStrings.count) {
311
- relationships.push({
312
- Id: `rId${count++}`,
313
- Type: RelType.SharedStrings,
314
- Target: "sharedStrings.xml",
315
- });
316
- }
317
- this._worksheets.forEach((worksheet) => {
318
- if (worksheet) {
319
- worksheet.rId = `rId${count++}`;
320
- relationships.push({
321
- Id: worksheet.rId,
322
- Type: RelType.Worksheet,
323
- Target: `worksheets/sheet${worksheet.id}.xml`,
324
- });
325
- }
326
- });
327
- return new Promise((resolve) => {
328
- const xform = new RelationshipsXform();
329
- const xml = xform.toXml(relationships);
330
- this.zip.append(xml, { name: "/xl/_rels/workbook.xml.rels" });
331
- resolve();
332
- });
333
- }
334
-
335
- addWorkbook() {
336
- const { zip } = this;
337
- const model = {
338
- worksheets: this._worksheets.filter(Boolean),
339
- definedNames: this._definedNames.model,
340
- views: this.views,
341
- properties: {},
342
- calcProperties: {},
343
- };
344
-
345
- return new Promise((resolve) => {
346
- const xform = new WorkbookXform();
347
- xform.prepare(model);
348
- zip.append(xform.toXml(model), { name: "/xl/workbook.xml" });
349
- resolve();
350
- });
351
- }
352
-
353
- _finalize() {
354
- return new Promise((resolve, reject) => {
355
- this.stream.on("error", reject);
356
- this.stream.on("finish", () => {
357
- resolve(this);
358
- });
359
- this.zip.on("error", reject);
360
-
361
- this.zip.finalize();
362
- });
363
- }
364
- }
365
-
366
- module.exports = WorkbookWriter;
1
+ const fs = require("fs");
2
+
3
+ const StreamBuf = require("../../utils/stream-buf");
4
+
5
+ // Dynamic import for ESM-only @alienkarma/archiver
6
+ let _ZipArchive = null;
7
+ const _archiverReady = import("@alienkarma/archiver").then((m) => {
8
+ _ZipArchive = m.ZipArchive;
9
+ });
10
+
11
+ const RelType = require("../../xlsx/rel-type");
12
+ const StylesXform = require("../../xlsx/xform/style/styles-xform");
13
+ const SharedStrings = require("../../utils/shared-strings");
14
+ const DefinedNames = require("../../doc/defined-names");
15
+
16
+ const CoreXform = require("../../xlsx/xform/core/core-xform");
17
+ const RelationshipsXform = require("../../xlsx/xform/core/relationships-xform");
18
+ const ContentTypesXform = require("../../xlsx/xform/core/content-types-xform");
19
+ const AppXform = require("../../xlsx/xform/core/app-xform");
20
+ const WorkbookXform = require("../../xlsx/xform/book/workbook-xform");
21
+ const SharedStringsXform = require("../../xlsx/xform/strings/shared-strings-xform");
22
+
23
+ const WorksheetWriter = require("./worksheet-writer");
24
+
25
+ const theme1Xml = require("../../xlsx/xml/theme1.js");
26
+
27
+ class WorkbookWriter {
28
+ constructor(options) {
29
+ options = options || {};
30
+
31
+ this.created = options.created || new Date();
32
+ this.modified = options.modified || this.created;
33
+ this.creator = options.creator || "ExcelJS";
34
+ this.lastModifiedBy = options.lastModifiedBy || "ExcelJS";
35
+ this.lastPrinted = options.lastPrinted;
36
+
37
+ // using shared strings creates a smaller xlsx file but may use more memory
38
+ this.useSharedStrings = options.useSharedStrings || false;
39
+ this.sharedStrings = new SharedStrings();
40
+
41
+ // style manager
42
+ this.styles = options.useStyles
43
+ ? new StylesXform(true)
44
+ : new StylesXform.Mock(true);
45
+
46
+ // defined names
47
+ this._definedNames = new DefinedNames();
48
+
49
+ this._worksheets = [];
50
+ this.views = [];
51
+
52
+ this.zipOptions = options.zip;
53
+
54
+ this.media = [];
55
+ this.commentRefs = [];
56
+
57
+ // Initialize zip after ESM archiver module loads, then add initial entries
58
+ this.promise = _archiverReady.then(() => {
59
+ this.zip = new _ZipArchive(this.zipOptions);
60
+ if (options.stream) {
61
+ this.stream = options.stream;
62
+ } else if (options.filename) {
63
+ this.stream = fs.createWriteStream(options.filename);
64
+ } else {
65
+ this.stream = new StreamBuf();
66
+ }
67
+ this.zip.pipe(this.stream);
68
+ return Promise.all([this.addThemes(), this.addOfficeRels()]);
69
+ });
70
+ }
71
+
72
+ get definedNames() {
73
+ return this._definedNames;
74
+ }
75
+
76
+ _openStream(path) {
77
+ const stream = new StreamBuf({ bufSize: 65536, batch: true });
78
+ this.zip.append(stream, { name: path });
79
+ stream.on("finish", () => {
80
+ stream.emit("zipped");
81
+ });
82
+ return stream;
83
+ }
84
+
85
+ _commitWorksheets() {
86
+ const commitWorksheet = function (worksheet) {
87
+ if (!worksheet.committed) {
88
+ return new Promise((resolve) => {
89
+ worksheet.stream.on("zipped", () => {
90
+ resolve();
91
+ });
92
+ worksheet.commit();
93
+ });
94
+ }
95
+ return Promise.resolve();
96
+ };
97
+ // if there are any uncommitted worksheets, commit them now and wait
98
+ const promises = this._worksheets.map(commitWorksheet);
99
+ if (promises.length) {
100
+ return Promise.all(promises);
101
+ }
102
+ return Promise.resolve();
103
+ }
104
+
105
+ async commit() {
106
+ // commit all worksheets, then add suplimentary files
107
+ await this.promise;
108
+ await this.addMedia();
109
+ await this._commitWorksheets();
110
+ await Promise.all([
111
+ this.addContentTypes(),
112
+ this.addApp(),
113
+ this.addCore(),
114
+ this.addSharedStrings(),
115
+ this.addStyles(),
116
+ this.addWorkbookRels(),
117
+ ]);
118
+ await this.addWorkbook();
119
+ return this._finalize();
120
+ }
121
+
122
+ get nextId() {
123
+ // find the next unique spot to add worksheet
124
+ let i;
125
+ for (i = 1; i < this._worksheets.length; i++) {
126
+ if (!this._worksheets[i]) {
127
+ return i;
128
+ }
129
+ }
130
+ return this._worksheets.length || 1;
131
+ }
132
+
133
+ addImage(image) {
134
+ const id = this.media.length;
135
+ const medium = Object.assign({}, image, {
136
+ type: "image",
137
+ name: `image${id}.${image.extension}`,
138
+ });
139
+ this.media.push(medium);
140
+ return id;
141
+ }
142
+
143
+ getImage(id) {
144
+ return this.media[id];
145
+ }
146
+
147
+ addWorksheet(name, options) {
148
+ // it's possible to add a worksheet with different than default
149
+ // shared string handling
150
+ // in fact, it's even possible to switch it mid-sheet
151
+ options = options || {};
152
+ const useSharedStrings =
153
+ options.useSharedStrings !== undefined
154
+ ? options.useSharedStrings
155
+ : this.useSharedStrings;
156
+
157
+ if (options.tabColor) {
158
+ // eslint-disable-next-line no-console
159
+ console.trace(
160
+ "tabColor option has moved to { properties: tabColor: {...} }",
161
+ );
162
+ options.properties = Object.assign(
163
+ {
164
+ tabColor: options.tabColor,
165
+ },
166
+ options.properties,
167
+ );
168
+ }
169
+
170
+ const id = this.nextId;
171
+ name = name || `sheet${id}`;
172
+
173
+ const worksheet = new WorksheetWriter({
174
+ id,
175
+ name,
176
+ workbook: this,
177
+ useSharedStrings,
178
+ properties: options.properties,
179
+ state: options.state,
180
+ pageSetup: options.pageSetup,
181
+ views: options.views,
182
+ autoFilter: options.autoFilter,
183
+ headerFooter: options.headerFooter,
184
+ });
185
+
186
+ this._worksheets[id] = worksheet;
187
+ return worksheet;
188
+ }
189
+
190
+ getWorksheet(id) {
191
+ if (id === undefined) {
192
+ return this._worksheets.find(() => true);
193
+ }
194
+ if (typeof id === "number") {
195
+ return this._worksheets[id];
196
+ }
197
+ if (typeof id === "string") {
198
+ return this._worksheets.find(
199
+ (worksheet) => worksheet && worksheet.name === id,
200
+ );
201
+ }
202
+ return undefined;
203
+ }
204
+
205
+ addStyles() {
206
+ return new Promise((resolve) => {
207
+ this.zip.append(this.styles.xml, { name: "xl/styles.xml" });
208
+ resolve();
209
+ });
210
+ }
211
+
212
+ addThemes() {
213
+ return new Promise((resolve) => {
214
+ this.zip.append(theme1Xml, { name: "xl/theme/theme1.xml" });
215
+ resolve();
216
+ });
217
+ }
218
+
219
+ addOfficeRels() {
220
+ return new Promise((resolve) => {
221
+ const xform = new RelationshipsXform();
222
+ const xml = xform.toXml([
223
+ { Id: "rId1", Type: RelType.OfficeDocument, Target: "xl/workbook.xml" },
224
+ {
225
+ Id: "rId2",
226
+ Type: RelType.CoreProperties,
227
+ Target: "docProps/core.xml",
228
+ },
229
+ {
230
+ Id: "rId3",
231
+ Type: RelType.ExtenderProperties,
232
+ Target: "docProps/app.xml",
233
+ },
234
+ ]);
235
+ this.zip.append(xml, { name: "/_rels/.rels" });
236
+ resolve();
237
+ });
238
+ }
239
+
240
+ addContentTypes() {
241
+ return new Promise((resolve) => {
242
+ const model = {
243
+ worksheets: this._worksheets.filter(Boolean),
244
+ sharedStrings: this.sharedStrings,
245
+ commentRefs: this.commentRefs,
246
+ media: this.media,
247
+ };
248
+ const xform = new ContentTypesXform();
249
+ const xml = xform.toXml(model);
250
+ this.zip.append(xml, { name: "[Content_Types].xml" });
251
+ resolve();
252
+ });
253
+ }
254
+
255
+ addMedia() {
256
+ return Promise.all(
257
+ this.media.map((medium) => {
258
+ if (medium.type === "image") {
259
+ const filename = `xl/media/${medium.name}`;
260
+ if (medium.filename) {
261
+ return this.zip.file(medium.filename, { name: filename });
262
+ }
263
+ if (medium.buffer) {
264
+ return this.zip.append(medium.buffer, { name: filename });
265
+ }
266
+ if (medium.base64) {
267
+ const dataimg64 = medium.base64;
268
+ const content = dataimg64.substring(dataimg64.indexOf(",") + 1);
269
+ return this.zip.append(content, { name: filename, base64: true });
270
+ }
271
+ }
272
+ throw new Error("Unsupported media");
273
+ }),
274
+ );
275
+ }
276
+
277
+ addApp() {
278
+ return new Promise((resolve) => {
279
+ const model = {
280
+ worksheets: this._worksheets.filter(Boolean),
281
+ };
282
+ const xform = new AppXform();
283
+ const xml = xform.toXml(model);
284
+ this.zip.append(xml, { name: "docProps/app.xml" });
285
+ resolve();
286
+ });
287
+ }
288
+
289
+ addCore() {
290
+ return new Promise((resolve) => {
291
+ const coreXform = new CoreXform();
292
+ const xml = coreXform.toXml(this);
293
+ this.zip.append(xml, { name: "docProps/core.xml" });
294
+ resolve();
295
+ });
296
+ }
297
+
298
+ addSharedStrings() {
299
+ if (this.sharedStrings.count) {
300
+ return new Promise((resolve) => {
301
+ const sharedStringsXform = new SharedStringsXform();
302
+ const xml = sharedStringsXform.toXml(this.sharedStrings);
303
+ this.zip.append(xml, { name: "/xl/sharedStrings.xml" });
304
+ resolve();
305
+ });
306
+ }
307
+ return Promise.resolve();
308
+ }
309
+
310
+ addWorkbookRels() {
311
+ let count = 1;
312
+ const relationships = [
313
+ { Id: `rId${count++}`, Type: RelType.Styles, Target: "styles.xml" },
314
+ { Id: `rId${count++}`, Type: RelType.Theme, Target: "theme/theme1.xml" },
315
+ ];
316
+ if (this.sharedStrings.count) {
317
+ relationships.push({
318
+ Id: `rId${count++}`,
319
+ Type: RelType.SharedStrings,
320
+ Target: "sharedStrings.xml",
321
+ });
322
+ }
323
+ this._worksheets.forEach((worksheet) => {
324
+ if (worksheet) {
325
+ worksheet.rId = `rId${count++}`;
326
+ relationships.push({
327
+ Id: worksheet.rId,
328
+ Type: RelType.Worksheet,
329
+ Target: `worksheets/sheet${worksheet.id}.xml`,
330
+ });
331
+ }
332
+ });
333
+ return new Promise((resolve) => {
334
+ const xform = new RelationshipsXform();
335
+ const xml = xform.toXml(relationships);
336
+ this.zip.append(xml, { name: "/xl/_rels/workbook.xml.rels" });
337
+ resolve();
338
+ });
339
+ }
340
+
341
+ addWorkbook() {
342
+ const { zip } = this;
343
+ const model = {
344
+ worksheets: this._worksheets.filter(Boolean),
345
+ definedNames: this._definedNames.model,
346
+ views: this.views,
347
+ properties: {},
348
+ calcProperties: {},
349
+ };
350
+
351
+ return new Promise((resolve) => {
352
+ const xform = new WorkbookXform();
353
+ xform.prepare(model);
354
+ zip.append(xform.toXml(model), { name: "/xl/workbook.xml" });
355
+ resolve();
356
+ });
357
+ }
358
+
359
+ _finalize() {
360
+ return new Promise((resolve, reject) => {
361
+ this.stream.on("error", reject);
362
+ this.stream.on("finish", () => {
363
+ resolve(this);
364
+ });
365
+ this.zip.on("error", reject);
366
+
367
+ this.zip.finalize();
368
+ });
369
+ }
370
+ }
371
+
372
+ module.exports = WorkbookWriter;