@alienkarma/exceljs 4.4.0-fork.11 → 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 -367
  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 -2
  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
package/lib/doc/table.js CHANGED
@@ -1,465 +1,465 @@
1
- /* eslint-disable max-classes-per-file */
2
- const colCache = require('../utils/col-cache');
3
-
4
- class Column {
5
- // wrapper around column model, allowing access and manipulation
6
- constructor(table, column, index) {
7
- this.table = table;
8
- this.column = column;
9
- this.index = index;
10
- }
11
-
12
- _set(name, value) {
13
- this.table.cacheState();
14
- this.column[name] = value;
15
- }
16
-
17
- /* eslint-disable lines-between-class-members */
18
- get name() {
19
- return this.column.name;
20
- }
21
- set name(value) {
22
- this._set('name', value);
23
- }
24
-
25
- get filterButton() {
26
- return this.column.filterButton;
27
- }
28
- set filterButton(value) {
29
- this.column.filterButton = value;
30
- }
31
-
32
- get style() {
33
- return this.column.style;
34
- }
35
- set style(value) {
36
- this.column.style = value;
37
- }
38
-
39
- get totalsRowLabel() {
40
- return this.column.totalsRowLabel;
41
- }
42
- set totalsRowLabel(value) {
43
- this._set('totalsRowLabel', value);
44
- }
45
-
46
- get totalsRowFunction() {
47
- return this.column.totalsRowFunction;
48
- }
49
- set totalsRowFunction(value) {
50
- this._set('totalsRowFunction', value);
51
- }
52
-
53
- get totalsRowResult() {
54
- return this.column.totalsRowResult;
55
- }
56
- set totalsRowResult(value) {
57
- this._set('totalsRowResult', value);
58
- }
59
-
60
- get totalsRowFormula() {
61
- return this.column.totalsRowFormula;
62
- }
63
- set totalsRowFormula(value) {
64
- this._set('totalsRowFormula', value);
65
- }
66
- /* eslint-enable lines-between-class-members */
67
- }
68
-
69
- class Table {
70
- constructor(worksheet, table) {
71
- this.worksheet = worksheet;
72
- if (table) {
73
- this.table = table;
74
- // check things are ok first
75
- this.validate();
76
-
77
- this.store();
78
- }
79
- }
80
-
81
- getFormula(column) {
82
- // get the correct formula to apply to the totals row
83
- switch (column.totalsRowFunction) {
84
- case 'none':
85
- return null;
86
- case 'average':
87
- return `SUBTOTAL(101,${this.table.name}[${column.name}])`;
88
- case 'countNums':
89
- return `SUBTOTAL(102,${this.table.name}[${column.name}])`;
90
- case 'count':
91
- return `SUBTOTAL(103,${this.table.name}[${column.name}])`;
92
- case 'max':
93
- return `SUBTOTAL(104,${this.table.name}[${column.name}])`;
94
- case 'min':
95
- return `SUBTOTAL(105,${this.table.name}[${column.name}])`;
96
- case 'stdDev':
97
- return `SUBTOTAL(106,${this.table.name}[${column.name}])`;
98
- case 'var':
99
- return `SUBTOTAL(107,${this.table.name}[${column.name}])`;
100
- case 'sum':
101
- return `SUBTOTAL(109,${this.table.name}[${column.name}])`;
102
- case 'custom':
103
- return column.totalsRowFormula;
104
- default:
105
- throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);
106
- }
107
- }
108
-
109
- get width() {
110
- // width of the table
111
- return this.table.columns.length;
112
- }
113
-
114
- get height() {
115
- // height of the table data
116
- return this.table.rows.length;
117
- }
118
-
119
- get filterHeight() {
120
- // height of the table data plus optional header row
121
- return this.height + (this.table.headerRow ? 1 : 0);
122
- }
123
-
124
- get tableHeight() {
125
- // full height of the table on the sheet
126
- return this.filterHeight + (this.table.totalsRow ? 1 : 0);
127
- }
128
-
129
- validate() {
130
- const {table} = this;
131
- // set defaults and check is valid
132
- const assign = (o, name, dflt) => {
133
- if (o[name] === undefined) {
134
- o[name] = dflt;
135
- }
136
- };
137
- assign(table, 'headerRow', true);
138
- assign(table, 'totalsRow', false);
139
-
140
- assign(table, 'style', {});
141
- assign(table.style, 'theme', 'TableStyleMedium2');
142
- assign(table.style, 'showFirstColumn', false);
143
- assign(table.style, 'showLastColumn', false);
144
- assign(table.style, 'showRowStripes', false);
145
- assign(table.style, 'showColumnStripes', false);
146
-
147
- const assert = (test, message) => {
148
- if (!test) {
149
- throw new Error(message);
150
- }
151
- };
152
- assert(table.ref, 'Table must have ref');
153
- assert(table.columns, 'Table must have column definitions');
154
- assert(table.rows, 'Table must have row definitions');
155
-
156
- table.tl = colCache.decodeAddress(table.ref);
157
- const {row, col} = table.tl;
158
- assert(row > 0, 'Table must be on valid row');
159
- assert(col > 0, 'Table must be on valid col');
160
-
161
- const {width, filterHeight, tableHeight} = this;
162
-
163
- // autoFilterRef is a range that includes optional headers only
164
- table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);
165
-
166
- // tableRef is a range that includes optional headers and totals
167
- table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);
168
-
169
- table.columns.forEach((column, i) => {
170
- assert(column.name, `Column ${i} must have a name`);
171
- if (i === 0) {
172
- assign(column, 'totalsRowLabel', 'Total');
173
- } else {
174
- assign(column, 'totalsRowFunction', 'none');
175
- column.totalsRowFormula = this.getFormula(column);
176
- }
177
- });
178
- }
179
-
180
- store() {
181
- // where the table needs to store table data, headers, footers in
182
- // the sheet...
183
- const assignStyle = (cell, style) => {
184
- if (style) {
185
- Object.keys(style).forEach(key => {
186
- cell.style[key] = style[key];
187
- });
188
- }
189
- };
190
-
191
- const {worksheet, table} = this;
192
- const {row, col} = table.tl;
193
- let count = 0;
194
- if (table.headerRow) {
195
- const r = worksheet.getRow(row + count++);
196
- table.columns.forEach((column, j) => {
197
- const {style, name} = column;
198
- const cell = r.getCell(col + j);
199
- cell.value = name;
200
- assignStyle(cell, style);
201
- });
202
- }
203
- table.rows.forEach(data => {
204
- const r = worksheet.getRow(row + count++);
205
- data.forEach((value, j) => {
206
- const cell = r.getCell(col + j);
207
- cell.value = value;
208
-
209
- assignStyle(cell, table.columns[j].style);
210
- });
211
- });
212
-
213
- if (table.totalsRow) {
214
- const r = worksheet.getRow(row + count++);
215
- table.columns.forEach((column, j) => {
216
- const cell = r.getCell(col + j);
217
- if (j === 0) {
218
- cell.value = column.totalsRowLabel;
219
- } else {
220
- const formula = this.getFormula(column);
221
- if (formula) {
222
- cell.value = {
223
- formula: column.totalsRowFormula,
224
- result: column.totalsRowResult,
225
- };
226
- } else {
227
- cell.value = null;
228
- }
229
- }
230
-
231
- assignStyle(cell, column.style);
232
- });
233
- }
234
- }
235
-
236
- load(worksheet) {
237
- // where the table will read necessary features from a loaded sheet
238
- const {table} = this;
239
- const {row, col} = table.tl;
240
- let count = 0;
241
- if (table.headerRow) {
242
- const r = worksheet.getRow(row + count++);
243
- table.columns.forEach((column, j) => {
244
- const cell = r.getCell(col + j);
245
- cell.value = column.name;
246
- });
247
- }
248
- table.rows.forEach(data => {
249
- const r = worksheet.getRow(row + count++);
250
- data.forEach((value, j) => {
251
- const cell = r.getCell(col + j);
252
- cell.value = value;
253
- });
254
- });
255
-
256
- if (table.totalsRow) {
257
- const r = worksheet.getRow(row + count++);
258
- table.columns.forEach((column, j) => {
259
- const cell = r.getCell(col + j);
260
- if (j === 0) {
261
- cell.value = column.totalsRowLabel;
262
- } else {
263
- const formula = this.getFormula(column);
264
- if (formula) {
265
- cell.value = {
266
- formula: column.totalsRowFormula,
267
- result: column.totalsRowResult,
268
- };
269
- }
270
- }
271
- });
272
- }
273
- }
274
-
275
- get model() {
276
- return this.table;
277
- }
278
-
279
- set model(value) {
280
- this.table = value;
281
- }
282
-
283
- // ================================================================
284
- // TODO: Mutating methods
285
- cacheState() {
286
- if (!this._cache) {
287
- this._cache = {
288
- ref: this.ref,
289
- width: this.width,
290
- tableHeight: this.tableHeight,
291
- };
292
- }
293
- }
294
-
295
- commit() {
296
- // changes may have been made that might have on-sheet effects
297
- if (!this._cache) {
298
- return;
299
- }
300
-
301
- // check things are ok first
302
- this.validate();
303
-
304
- const ref = colCache.decodeAddress(this._cache.ref);
305
- if (this.ref !== this._cache.ref) {
306
- // wipe out whole table footprint at previous location
307
- for (let i = 0; i < this._cache.tableHeight; i++) {
308
- const row = this.worksheet.getRow(ref.row + i);
309
- for (let j = 0; j < this._cache.width; j++) {
310
- const cell = row.getCell(ref.col + j);
311
- cell.value = null;
312
- }
313
- }
314
- } else {
315
- // clear out below table if it has shrunk
316
- for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {
317
- const row = this.worksheet.getRow(ref.row + i);
318
- for (let j = 0; j < this._cache.width; j++) {
319
- const cell = row.getCell(ref.col + j);
320
- cell.value = null;
321
- }
322
- }
323
-
324
- // clear out to right of table if it has lost columns
325
- for (let i = 0; i < this.tableHeight; i++) {
326
- const row = this.worksheet.getRow(ref.row + i);
327
- for (let j = this.width; j < this._cache.width; j++) {
328
- const cell = row.getCell(ref.col + j);
329
- cell.value = null;
330
- }
331
- }
332
- }
333
-
334
- this.store();
335
- }
336
-
337
- addRow(values, rowNumber) {
338
- // Add a row of data, either insert at rowNumber or append
339
- this.cacheState();
340
-
341
- if (rowNumber === undefined) {
342
- this.table.rows.push(values);
343
- } else {
344
- this.table.rows.splice(rowNumber, 0, values);
345
- }
346
- }
347
-
348
- removeRows(rowIndex, count = 1) {
349
- // Remove a rows of data
350
- this.cacheState();
351
- this.table.rows.splice(rowIndex, count);
352
- }
353
-
354
- getColumn(colIndex) {
355
- const column = this.table.columns[colIndex];
356
- return new Column(this, column, colIndex);
357
- }
358
-
359
- addColumn(column, values, colIndex) {
360
- // Add a new column, including column defn and values
361
- // Inserts at colNumber or adds to the right
362
- this.cacheState();
363
-
364
- if (colIndex === undefined) {
365
- this.table.columns.push(column);
366
- this.table.rows.forEach((row, i) => {
367
- row.push(values[i]);
368
- });
369
- } else {
370
- this.table.columns.splice(colIndex, 0, column);
371
- this.table.rows.forEach((row, i) => {
372
- row.splice(colIndex, 0, values[i]);
373
- });
374
- }
375
- }
376
-
377
- removeColumns(colIndex, count = 1) {
378
- // Remove a column with data
379
- this.cacheState();
380
-
381
- this.table.columns.splice(colIndex, count);
382
- this.table.rows.forEach(row => {
383
- row.splice(colIndex, count);
384
- });
385
- }
386
-
387
- _assign(target, prop, value) {
388
- this.cacheState();
389
- target[prop] = value;
390
- }
391
-
392
- /* eslint-disable lines-between-class-members */
393
- get ref() {
394
- return this.table.ref;
395
- }
396
- set ref(value) {
397
- this._assign(this.table, 'ref', value);
398
- }
399
-
400
- get name() {
401
- return this.table.name;
402
- }
403
- set name(value) {
404
- this.table.name = value;
405
- }
406
-
407
- get displayName() {
408
- return this.table.displyName || this.table.name;
409
- }
410
- set displayNamename(value) {
411
- this.table.displayName = value;
412
- }
413
-
414
- get headerRow() {
415
- return this.table.headerRow;
416
- }
417
- set headerRow(value) {
418
- this._assign(this.table, 'headerRow', value);
419
- }
420
-
421
- get totalsRow() {
422
- return this.table.totalsRow;
423
- }
424
- set totalsRow(value) {
425
- this._assign(this.table, 'totalsRow', value);
426
- }
427
-
428
- get theme() {
429
- return this.table.style.name;
430
- }
431
- set theme(value) {
432
- this.table.style.name = value;
433
- }
434
-
435
- get showFirstColumn() {
436
- return this.table.style.showFirstColumn;
437
- }
438
- set showFirstColumn(value) {
439
- this.table.style.showFirstColumn = value;
440
- }
441
-
442
- get showLastColumn() {
443
- return this.table.style.showLastColumn;
444
- }
445
- set showLastColumn(value) {
446
- this.table.style.showLastColumn = value;
447
- }
448
-
449
- get showRowStripes() {
450
- return this.table.style.showRowStripes;
451
- }
452
- set showRowStripes(value) {
453
- this.table.style.showRowStripes = value;
454
- }
455
-
456
- get showColumnStripes() {
457
- return this.table.style.showColumnStripes;
458
- }
459
- set showColumnStripes(value) {
460
- this.table.style.showColumnStripes = value;
461
- }
462
- /* eslint-enable lines-between-class-members */
463
- }
464
-
465
- module.exports = Table;
1
+ /* eslint-disable max-classes-per-file */
2
+ const colCache = require('../utils/col-cache');
3
+
4
+ class Column {
5
+ // wrapper around column model, allowing access and manipulation
6
+ constructor(table, column, index) {
7
+ this.table = table;
8
+ this.column = column;
9
+ this.index = index;
10
+ }
11
+
12
+ _set(name, value) {
13
+ this.table.cacheState();
14
+ this.column[name] = value;
15
+ }
16
+
17
+ /* eslint-disable lines-between-class-members */
18
+ get name() {
19
+ return this.column.name;
20
+ }
21
+ set name(value) {
22
+ this._set('name', value);
23
+ }
24
+
25
+ get filterButton() {
26
+ return this.column.filterButton;
27
+ }
28
+ set filterButton(value) {
29
+ this.column.filterButton = value;
30
+ }
31
+
32
+ get style() {
33
+ return this.column.style;
34
+ }
35
+ set style(value) {
36
+ this.column.style = value;
37
+ }
38
+
39
+ get totalsRowLabel() {
40
+ return this.column.totalsRowLabel;
41
+ }
42
+ set totalsRowLabel(value) {
43
+ this._set('totalsRowLabel', value);
44
+ }
45
+
46
+ get totalsRowFunction() {
47
+ return this.column.totalsRowFunction;
48
+ }
49
+ set totalsRowFunction(value) {
50
+ this._set('totalsRowFunction', value);
51
+ }
52
+
53
+ get totalsRowResult() {
54
+ return this.column.totalsRowResult;
55
+ }
56
+ set totalsRowResult(value) {
57
+ this._set('totalsRowResult', value);
58
+ }
59
+
60
+ get totalsRowFormula() {
61
+ return this.column.totalsRowFormula;
62
+ }
63
+ set totalsRowFormula(value) {
64
+ this._set('totalsRowFormula', value);
65
+ }
66
+ /* eslint-enable lines-between-class-members */
67
+ }
68
+
69
+ class Table {
70
+ constructor(worksheet, table) {
71
+ this.worksheet = worksheet;
72
+ if (table) {
73
+ this.table = table;
74
+ // check things are ok first
75
+ this.validate();
76
+
77
+ this.store();
78
+ }
79
+ }
80
+
81
+ getFormula(column) {
82
+ // get the correct formula to apply to the totals row
83
+ switch (column.totalsRowFunction) {
84
+ case 'none':
85
+ return null;
86
+ case 'average':
87
+ return `SUBTOTAL(101,${this.table.name}[${column.name}])`;
88
+ case 'countNums':
89
+ return `SUBTOTAL(102,${this.table.name}[${column.name}])`;
90
+ case 'count':
91
+ return `SUBTOTAL(103,${this.table.name}[${column.name}])`;
92
+ case 'max':
93
+ return `SUBTOTAL(104,${this.table.name}[${column.name}])`;
94
+ case 'min':
95
+ return `SUBTOTAL(105,${this.table.name}[${column.name}])`;
96
+ case 'stdDev':
97
+ return `SUBTOTAL(106,${this.table.name}[${column.name}])`;
98
+ case 'var':
99
+ return `SUBTOTAL(107,${this.table.name}[${column.name}])`;
100
+ case 'sum':
101
+ return `SUBTOTAL(109,${this.table.name}[${column.name}])`;
102
+ case 'custom':
103
+ return column.totalsRowFormula;
104
+ default:
105
+ throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);
106
+ }
107
+ }
108
+
109
+ get width() {
110
+ // width of the table
111
+ return this.table.columns.length;
112
+ }
113
+
114
+ get height() {
115
+ // height of the table data
116
+ return this.table.rows.length;
117
+ }
118
+
119
+ get filterHeight() {
120
+ // height of the table data plus optional header row
121
+ return this.height + (this.table.headerRow ? 1 : 0);
122
+ }
123
+
124
+ get tableHeight() {
125
+ // full height of the table on the sheet
126
+ return this.filterHeight + (this.table.totalsRow ? 1 : 0);
127
+ }
128
+
129
+ validate() {
130
+ const {table} = this;
131
+ // set defaults and check is valid
132
+ const assign = (o, name, dflt) => {
133
+ if (o[name] === undefined) {
134
+ o[name] = dflt;
135
+ }
136
+ };
137
+ assign(table, 'headerRow', true);
138
+ assign(table, 'totalsRow', false);
139
+
140
+ assign(table, 'style', {});
141
+ assign(table.style, 'theme', 'TableStyleMedium2');
142
+ assign(table.style, 'showFirstColumn', false);
143
+ assign(table.style, 'showLastColumn', false);
144
+ assign(table.style, 'showRowStripes', false);
145
+ assign(table.style, 'showColumnStripes', false);
146
+
147
+ const assert = (test, message) => {
148
+ if (!test) {
149
+ throw new Error(message);
150
+ }
151
+ };
152
+ assert(table.ref, 'Table must have ref');
153
+ assert(table.columns, 'Table must have column definitions');
154
+ assert(table.rows, 'Table must have row definitions');
155
+
156
+ table.tl = colCache.decodeAddress(table.ref);
157
+ const {row, col} = table.tl;
158
+ assert(row > 0, 'Table must be on valid row');
159
+ assert(col > 0, 'Table must be on valid col');
160
+
161
+ const {width, filterHeight, tableHeight} = this;
162
+
163
+ // autoFilterRef is a range that includes optional headers only
164
+ table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);
165
+
166
+ // tableRef is a range that includes optional headers and totals
167
+ table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);
168
+
169
+ table.columns.forEach((column, i) => {
170
+ assert(column.name, `Column ${i} must have a name`);
171
+ if (i === 0) {
172
+ assign(column, 'totalsRowLabel', 'Total');
173
+ } else {
174
+ assign(column, 'totalsRowFunction', 'none');
175
+ column.totalsRowFormula = this.getFormula(column);
176
+ }
177
+ });
178
+ }
179
+
180
+ store() {
181
+ // where the table needs to store table data, headers, footers in
182
+ // the sheet...
183
+ const assignStyle = (cell, style) => {
184
+ if (style) {
185
+ Object.keys(style).forEach(key => {
186
+ cell.style[key] = style[key];
187
+ });
188
+ }
189
+ };
190
+
191
+ const {worksheet, table} = this;
192
+ const {row, col} = table.tl;
193
+ let count = 0;
194
+ if (table.headerRow) {
195
+ const r = worksheet.getRow(row + count++);
196
+ table.columns.forEach((column, j) => {
197
+ const {style, name} = column;
198
+ const cell = r.getCell(col + j);
199
+ cell.value = name;
200
+ assignStyle(cell, style);
201
+ });
202
+ }
203
+ table.rows.forEach(data => {
204
+ const r = worksheet.getRow(row + count++);
205
+ data.forEach((value, j) => {
206
+ const cell = r.getCell(col + j);
207
+ cell.value = value;
208
+
209
+ assignStyle(cell, table.columns[j].style);
210
+ });
211
+ });
212
+
213
+ if (table.totalsRow) {
214
+ const r = worksheet.getRow(row + count++);
215
+ table.columns.forEach((column, j) => {
216
+ const cell = r.getCell(col + j);
217
+ if (j === 0) {
218
+ cell.value = column.totalsRowLabel;
219
+ } else {
220
+ const formula = this.getFormula(column);
221
+ if (formula) {
222
+ cell.value = {
223
+ formula: column.totalsRowFormula,
224
+ result: column.totalsRowResult,
225
+ };
226
+ } else {
227
+ cell.value = null;
228
+ }
229
+ }
230
+
231
+ assignStyle(cell, column.style);
232
+ });
233
+ }
234
+ }
235
+
236
+ load(worksheet) {
237
+ // where the table will read necessary features from a loaded sheet
238
+ const {table} = this;
239
+ const {row, col} = table.tl;
240
+ let count = 0;
241
+ if (table.headerRow) {
242
+ const r = worksheet.getRow(row + count++);
243
+ table.columns.forEach((column, j) => {
244
+ const cell = r.getCell(col + j);
245
+ cell.value = column.name;
246
+ });
247
+ }
248
+ table.rows.forEach(data => {
249
+ const r = worksheet.getRow(row + count++);
250
+ data.forEach((value, j) => {
251
+ const cell = r.getCell(col + j);
252
+ cell.value = value;
253
+ });
254
+ });
255
+
256
+ if (table.totalsRow) {
257
+ const r = worksheet.getRow(row + count++);
258
+ table.columns.forEach((column, j) => {
259
+ const cell = r.getCell(col + j);
260
+ if (j === 0) {
261
+ cell.value = column.totalsRowLabel;
262
+ } else {
263
+ const formula = this.getFormula(column);
264
+ if (formula) {
265
+ cell.value = {
266
+ formula: column.totalsRowFormula,
267
+ result: column.totalsRowResult,
268
+ };
269
+ }
270
+ }
271
+ });
272
+ }
273
+ }
274
+
275
+ get model() {
276
+ return this.table;
277
+ }
278
+
279
+ set model(value) {
280
+ this.table = value;
281
+ }
282
+
283
+ // ================================================================
284
+ // TODO: Mutating methods
285
+ cacheState() {
286
+ if (!this._cache) {
287
+ this._cache = {
288
+ ref: this.ref,
289
+ width: this.width,
290
+ tableHeight: this.tableHeight,
291
+ };
292
+ }
293
+ }
294
+
295
+ commit() {
296
+ // changes may have been made that might have on-sheet effects
297
+ if (!this._cache) {
298
+ return;
299
+ }
300
+
301
+ // check things are ok first
302
+ this.validate();
303
+
304
+ const ref = colCache.decodeAddress(this._cache.ref);
305
+ if (this.ref !== this._cache.ref) {
306
+ // wipe out whole table footprint at previous location
307
+ for (let i = 0; i < this._cache.tableHeight; i++) {
308
+ const row = this.worksheet.getRow(ref.row + i);
309
+ for (let j = 0; j < this._cache.width; j++) {
310
+ const cell = row.getCell(ref.col + j);
311
+ cell.value = null;
312
+ }
313
+ }
314
+ } else {
315
+ // clear out below table if it has shrunk
316
+ for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {
317
+ const row = this.worksheet.getRow(ref.row + i);
318
+ for (let j = 0; j < this._cache.width; j++) {
319
+ const cell = row.getCell(ref.col + j);
320
+ cell.value = null;
321
+ }
322
+ }
323
+
324
+ // clear out to right of table if it has lost columns
325
+ for (let i = 0; i < this.tableHeight; i++) {
326
+ const row = this.worksheet.getRow(ref.row + i);
327
+ for (let j = this.width; j < this._cache.width; j++) {
328
+ const cell = row.getCell(ref.col + j);
329
+ cell.value = null;
330
+ }
331
+ }
332
+ }
333
+
334
+ this.store();
335
+ }
336
+
337
+ addRow(values, rowNumber) {
338
+ // Add a row of data, either insert at rowNumber or append
339
+ this.cacheState();
340
+
341
+ if (rowNumber === undefined) {
342
+ this.table.rows.push(values);
343
+ } else {
344
+ this.table.rows.splice(rowNumber, 0, values);
345
+ }
346
+ }
347
+
348
+ removeRows(rowIndex, count = 1) {
349
+ // Remove a rows of data
350
+ this.cacheState();
351
+ this.table.rows.splice(rowIndex, count);
352
+ }
353
+
354
+ getColumn(colIndex) {
355
+ const column = this.table.columns[colIndex];
356
+ return new Column(this, column, colIndex);
357
+ }
358
+
359
+ addColumn(column, values, colIndex) {
360
+ // Add a new column, including column defn and values
361
+ // Inserts at colNumber or adds to the right
362
+ this.cacheState();
363
+
364
+ if (colIndex === undefined) {
365
+ this.table.columns.push(column);
366
+ this.table.rows.forEach((row, i) => {
367
+ row.push(values[i]);
368
+ });
369
+ } else {
370
+ this.table.columns.splice(colIndex, 0, column);
371
+ this.table.rows.forEach((row, i) => {
372
+ row.splice(colIndex, 0, values[i]);
373
+ });
374
+ }
375
+ }
376
+
377
+ removeColumns(colIndex, count = 1) {
378
+ // Remove a column with data
379
+ this.cacheState();
380
+
381
+ this.table.columns.splice(colIndex, count);
382
+ this.table.rows.forEach(row => {
383
+ row.splice(colIndex, count);
384
+ });
385
+ }
386
+
387
+ _assign(target, prop, value) {
388
+ this.cacheState();
389
+ target[prop] = value;
390
+ }
391
+
392
+ /* eslint-disable lines-between-class-members */
393
+ get ref() {
394
+ return this.table.ref;
395
+ }
396
+ set ref(value) {
397
+ this._assign(this.table, 'ref', value);
398
+ }
399
+
400
+ get name() {
401
+ return this.table.name;
402
+ }
403
+ set name(value) {
404
+ this.table.name = value;
405
+ }
406
+
407
+ get displayName() {
408
+ return this.table.displyName || this.table.name;
409
+ }
410
+ set displayNamename(value) {
411
+ this.table.displayName = value;
412
+ }
413
+
414
+ get headerRow() {
415
+ return this.table.headerRow;
416
+ }
417
+ set headerRow(value) {
418
+ this._assign(this.table, 'headerRow', value);
419
+ }
420
+
421
+ get totalsRow() {
422
+ return this.table.totalsRow;
423
+ }
424
+ set totalsRow(value) {
425
+ this._assign(this.table, 'totalsRow', value);
426
+ }
427
+
428
+ get theme() {
429
+ return this.table.style.name;
430
+ }
431
+ set theme(value) {
432
+ this.table.style.name = value;
433
+ }
434
+
435
+ get showFirstColumn() {
436
+ return this.table.style.showFirstColumn;
437
+ }
438
+ set showFirstColumn(value) {
439
+ this.table.style.showFirstColumn = value;
440
+ }
441
+
442
+ get showLastColumn() {
443
+ return this.table.style.showLastColumn;
444
+ }
445
+ set showLastColumn(value) {
446
+ this.table.style.showLastColumn = value;
447
+ }
448
+
449
+ get showRowStripes() {
450
+ return this.table.style.showRowStripes;
451
+ }
452
+ set showRowStripes(value) {
453
+ this.table.style.showRowStripes = value;
454
+ }
455
+
456
+ get showColumnStripes() {
457
+ return this.table.style.showColumnStripes;
458
+ }
459
+ set showColumnStripes(value) {
460
+ this.table.style.showColumnStripes = value;
461
+ }
462
+ /* eslint-enable lines-between-class-members */
463
+ }
464
+
465
+ module.exports = Table;