@lyit/exceljs 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3398 -0
  3. package/README_zh.md +2878 -0
  4. package/dist/LICENSE +22 -0
  5. package/dist/es5/csv/csv.js +182 -0
  6. package/dist/es5/csv/csv.js.map +1 -0
  7. package/dist/es5/csv/line-buffer.js +68 -0
  8. package/dist/es5/csv/line-buffer.js.map +1 -0
  9. package/dist/es5/csv/stream-converter.js +110 -0
  10. package/dist/es5/csv/stream-converter.js.map +1 -0
  11. package/dist/es5/doc/anchor.js +73 -0
  12. package/dist/es5/doc/anchor.js.map +1 -0
  13. package/dist/es5/doc/cell.js +960 -0
  14. package/dist/es5/doc/cell.js.map +1 -0
  15. package/dist/es5/doc/column.js +274 -0
  16. package/dist/es5/doc/column.js.map +1 -0
  17. package/dist/es5/doc/data-validations.js +18 -0
  18. package/dist/es5/doc/data-validations.js.map +1 -0
  19. package/dist/es5/doc/defined-names.js +173 -0
  20. package/dist/es5/doc/defined-names.js.map +1 -0
  21. package/dist/es5/doc/enums.js +49 -0
  22. package/dist/es5/doc/enums.js.map +1 -0
  23. package/dist/es5/doc/form-checkbox.js +342 -0
  24. package/dist/es5/doc/form-checkbox.js.map +1 -0
  25. package/dist/es5/doc/image.js +69 -0
  26. package/dist/es5/doc/image.js.map +1 -0
  27. package/dist/es5/doc/modelcontainer.js +16 -0
  28. package/dist/es5/doc/modelcontainer.js.map +1 -0
  29. package/dist/es5/doc/note.js +64 -0
  30. package/dist/es5/doc/note.js.map +1 -0
  31. package/dist/es5/doc/pivot-table.js +247 -0
  32. package/dist/es5/doc/pivot-table.js.map +1 -0
  33. package/dist/es5/doc/range.js +229 -0
  34. package/dist/es5/doc/range.js.map +1 -0
  35. package/dist/es5/doc/row.js +391 -0
  36. package/dist/es5/doc/row.js.map +1 -0
  37. package/dist/es5/doc/table.js +542 -0
  38. package/dist/es5/doc/table.js.map +1 -0
  39. package/dist/es5/doc/workbook.js +221 -0
  40. package/dist/es5/doc/workbook.js.map +1 -0
  41. package/dist/es5/doc/worksheet.js +996 -0
  42. package/dist/es5/doc/worksheet.js.map +1 -0
  43. package/dist/es5/exceljs.bare.js +14 -0
  44. package/dist/es5/exceljs.bare.js.map +1 -0
  45. package/dist/es5/exceljs.browser.js +36 -0
  46. package/dist/es5/exceljs.browser.js.map +1 -0
  47. package/dist/es5/exceljs.nodejs.js +15 -0
  48. package/dist/es5/exceljs.nodejs.js.map +1 -0
  49. package/dist/es5/index.js +15 -0
  50. package/dist/es5/stream/xlsx/hyperlink-reader.js +90 -0
  51. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -0
  52. package/dist/es5/stream/xlsx/sheet-comments-writer.js +94 -0
  53. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -0
  54. package/dist/es5/stream/xlsx/sheet-rels-writer.js +94 -0
  55. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -0
  56. package/dist/es5/stream/xlsx/workbook-reader.js +361 -0
  57. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -0
  58. package/dist/es5/stream/xlsx/workbook-writer.js +347 -0
  59. package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -0
  60. package/dist/es5/stream/xlsx/worksheet-reader.js +392 -0
  61. package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -0
  62. package/dist/es5/stream/xlsx/worksheet-writer.js +652 -0
  63. package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -0
  64. package/dist/es5/utils/auto-drain.js +18 -0
  65. package/dist/es5/utils/auto-drain.js.map +1 -0
  66. package/dist/es5/utils/browser-buffer-decode.js +15 -0
  67. package/dist/es5/utils/browser-buffer-decode.js.map +1 -0
  68. package/dist/es5/utils/browser-buffer-encode.js +18 -0
  69. package/dist/es5/utils/browser-buffer-encode.js.map +1 -0
  70. package/dist/es5/utils/cell-matrix.js +149 -0
  71. package/dist/es5/utils/cell-matrix.js.map +1 -0
  72. package/dist/es5/utils/col-cache.js +258 -0
  73. package/dist/es5/utils/col-cache.js.map +1 -0
  74. package/dist/es5/utils/copy-style.js +43 -0
  75. package/dist/es5/utils/copy-style.js.map +1 -0
  76. package/dist/es5/utils/encryptor.js +58 -0
  77. package/dist/es5/utils/encryptor.js.map +1 -0
  78. package/dist/es5/utils/iterate-stream.js +46 -0
  79. package/dist/es5/utils/iterate-stream.js.map +1 -0
  80. package/dist/es5/utils/parse-sax.js +66 -0
  81. package/dist/es5/utils/parse-sax.js.map +1 -0
  82. package/dist/es5/utils/shared-formula.js +42 -0
  83. package/dist/es5/utils/shared-formula.js.map +1 -0
  84. package/dist/es5/utils/shared-strings.js +37 -0
  85. package/dist/es5/utils/shared-strings.js.map +1 -0
  86. package/dist/es5/utils/stream-base64.js +66 -0
  87. package/dist/es5/utils/stream-base64.js.map +1 -0
  88. package/dist/es5/utils/stream-buf.js +365 -0
  89. package/dist/es5/utils/stream-buf.js.map +1 -0
  90. package/dist/es5/utils/string-buf.js +73 -0
  91. package/dist/es5/utils/string-buf.js.map +1 -0
  92. package/dist/es5/utils/string-builder.js +32 -0
  93. package/dist/es5/utils/string-builder.js.map +1 -0
  94. package/dist/es5/utils/stuttered-pipe.js +61 -0
  95. package/dist/es5/utils/stuttered-pipe.js.map +1 -0
  96. package/dist/es5/utils/typed-stack.js +23 -0
  97. package/dist/es5/utils/typed-stack.js.map +1 -0
  98. package/dist/es5/utils/under-dash.js +168 -0
  99. package/dist/es5/utils/under-dash.js.map +1 -0
  100. package/dist/es5/utils/utils.js +205 -0
  101. package/dist/es5/utils/utils.js.map +1 -0
  102. package/dist/es5/utils/xml-stream.js +151 -0
  103. package/dist/es5/utils/xml-stream.js.map +1 -0
  104. package/dist/es5/utils/zip-stream.js +79 -0
  105. package/dist/es5/utils/zip-stream.js.map +1 -0
  106. package/dist/es5/xlsx/defaultnumformats.js +230 -0
  107. package/dist/es5/xlsx/defaultnumformats.js.map +1 -0
  108. package/dist/es5/xlsx/rel-type.js +22 -0
  109. package/dist/es5/xlsx/rel-type.js.map +1 -0
  110. package/dist/es5/xlsx/xform/base-xform.js +139 -0
  111. package/dist/es5/xlsx/xform/base-xform.js.map +1 -0
  112. package/dist/es5/xlsx/xform/book/defined-name-xform.js +85 -0
  113. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -0
  114. package/dist/es5/xlsx/xform/book/sheet-xform.js +32 -0
  115. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +1 -0
  116. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
  117. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +1 -0
  118. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
  119. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +1 -0
  120. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +27 -0
  121. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +1 -0
  122. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +51 -0
  123. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +1 -0
  124. package/dist/es5/xlsx/xform/book/workbook-xform.js +244 -0
  125. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -0
  126. package/dist/es5/xlsx/xform/comment/comment-xform.js +103 -0
  127. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -0
  128. package/dist/es5/xlsx/xform/comment/comments-xform.js +76 -0
  129. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +1 -0
  130. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +35 -0
  131. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +1 -0
  132. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +32 -0
  133. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +1 -0
  134. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +53 -0
  135. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +1 -0
  136. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +98 -0
  137. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +1 -0
  138. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +235 -0
  139. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
  140. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +93 -0
  141. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -0
  142. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +61 -0
  143. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -0
  144. package/dist/es5/xlsx/xform/composite-xform.js +51 -0
  145. package/dist/es5/xlsx/xform/composite-xform.js.map +1 -0
  146. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +30 -0
  147. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +1 -0
  148. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +27 -0
  149. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +1 -0
  150. package/dist/es5/xlsx/xform/core/app-xform.js +93 -0
  151. package/dist/es5/xlsx/xform/core/app-xform.js.map +1 -0
  152. package/dist/es5/xlsx/xform/core/content-types-xform.js +198 -0
  153. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
  154. package/dist/es5/xlsx/xform/core/core-xform.js +160 -0
  155. package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -0
  156. package/dist/es5/xlsx/xform/core/relationship-xform.js +23 -0
  157. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +1 -0
  158. package/dist/es5/xlsx/xform/core/relationships-xform.js +65 -0
  159. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -0
  160. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
  161. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +1 -0
  162. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +61 -0
  163. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +1 -0
  164. package/dist/es5/xlsx/xform/drawing/blip-xform.js +39 -0
  165. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +1 -0
  166. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
  167. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +1 -0
  168. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
  169. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -0
  170. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +82 -0
  171. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +1 -0
  172. package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js +75 -0
  173. package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js.map +1 -0
  174. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +98 -0
  175. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +1 -0
  176. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +40 -0
  177. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +1 -0
  178. package/dist/es5/xlsx/xform/drawing/ext-xform.js +38 -0
  179. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +1 -0
  180. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +38 -0
  181. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +1 -0
  182. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
  183. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +1 -0
  184. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  185. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +1 -0
  186. package/dist/es5/xlsx/xform/drawing/pic-xform.js +67 -0
  187. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +1 -0
  188. package/dist/es5/xlsx/xform/drawing/sp-pr.js +30 -0
  189. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +1 -0
  190. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  191. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +1 -0
  192. package/dist/es5/xlsx/xform/list-xform.js +91 -0
  193. package/dist/es5/xlsx/xform/list-xform.js.map +1 -0
  194. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +72 -0
  195. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -0
  196. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +74 -0
  197. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -0
  198. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +100 -0
  199. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -0
  200. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +229 -0
  201. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -0
  202. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +40 -0
  203. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -0
  204. package/dist/es5/xlsx/xform/sheet/cell-xform.js +450 -0
  205. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -0
  206. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +282 -0
  207. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -0
  208. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
  209. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +1 -0
  210. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
  211. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +1 -0
  212. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +45 -0
  213. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +1 -0
  214. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
  215. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -0
  216. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +54 -0
  217. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +1 -0
  218. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +71 -0
  219. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +1 -0
  220. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +22 -0
  221. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +1 -0
  222. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +43 -0
  223. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +1 -0
  224. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +28 -0
  225. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +1 -0
  226. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +88 -0
  227. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -0
  228. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
  229. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +1 -0
  230. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +52 -0
  231. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +1 -0
  232. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
  233. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +1 -0
  234. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +82 -0
  235. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +1 -0
  236. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
  237. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +1 -0
  238. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +66 -0
  239. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +1 -0
  240. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
  241. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +1 -0
  242. package/dist/es5/xlsx/xform/sheet/col-xform.js +78 -0
  243. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +1 -0
  244. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +247 -0
  245. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -0
  246. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +28 -0
  247. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +1 -0
  248. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +32 -0
  249. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +1 -0
  250. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +69 -0
  251. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +1 -0
  252. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +126 -0
  253. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +1 -0
  254. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +50 -0
  255. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +1 -0
  256. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +26 -0
  257. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +1 -0
  258. package/dist/es5/xlsx/xform/sheet/merges.js +52 -0
  259. package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -0
  260. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +35 -0
  261. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +1 -0
  262. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +24 -0
  263. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +1 -0
  264. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +46 -0
  265. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +1 -0
  266. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
  267. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +1 -0
  268. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +99 -0
  269. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +1 -0
  270. package/dist/es5/xlsx/xform/sheet/picture-xform.js +32 -0
  271. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +1 -0
  272. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +45 -0
  273. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +1 -0
  274. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +37 -0
  275. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +1 -0
  276. package/dist/es5/xlsx/xform/sheet/row-xform.js +131 -0
  277. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
  278. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +63 -0
  279. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +1 -0
  280. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +83 -0
  281. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +1 -0
  282. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +84 -0
  283. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +1 -0
  284. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +190 -0
  285. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +1 -0
  286. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +32 -0
  287. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +1 -0
  288. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +622 -0
  289. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -0
  290. package/dist/es5/xlsx/xform/simple/boolean-xform.js +27 -0
  291. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +1 -0
  292. package/dist/es5/xlsx/xform/simple/date-xform.js +58 -0
  293. package/dist/es5/xlsx/xform/simple/date-xform.js.map +1 -0
  294. package/dist/es5/xlsx/xform/simple/float-xform.js +47 -0
  295. package/dist/es5/xlsx/xform/simple/float-xform.js.map +1 -0
  296. package/dist/es5/xlsx/xform/simple/integer-xform.js +53 -0
  297. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +1 -0
  298. package/dist/es5/xlsx/xform/simple/string-xform.js +47 -0
  299. package/dist/es5/xlsx/xform/simple/string-xform.js.map +1 -0
  300. package/dist/es5/xlsx/xform/static-xform.js +61 -0
  301. package/dist/es5/xlsx/xform/static-xform.js.map +1 -0
  302. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  303. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +1 -0
  304. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +92 -0
  305. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +1 -0
  306. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +99 -0
  307. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +1 -0
  308. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +116 -0
  309. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -0
  310. package/dist/es5/xlsx/xform/strings/text-xform.js +39 -0
  311. package/dist/es5/xlsx/xform/strings/text-xform.js.map +1 -0
  312. package/dist/es5/xlsx/xform/style/alignment-xform.js +139 -0
  313. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +1 -0
  314. package/dist/es5/xlsx/xform/style/border-xform.js +185 -0
  315. package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -0
  316. package/dist/es5/xlsx/xform/style/color-xform.js +66 -0
  317. package/dist/es5/xlsx/xform/style/color-xform.js.map +1 -0
  318. package/dist/es5/xlsx/xform/style/dxf-xform.js +106 -0
  319. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +1 -0
  320. package/dist/es5/xlsx/xform/style/fill-xform.js +307 -0
  321. package/dist/es5/xlsx/xform/style/fill-xform.js.map +1 -0
  322. package/dist/es5/xlsx/xform/style/font-xform.js +175 -0
  323. package/dist/es5/xlsx/xform/style/font-xform.js.map +1 -0
  324. package/dist/es5/xlsx/xform/style/numfmt-xform.js +58 -0
  325. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +1 -0
  326. package/dist/es5/xlsx/xform/style/protection-xform.js +53 -0
  327. package/dist/es5/xlsx/xform/style/protection-xform.js.map +1 -0
  328. package/dist/es5/xlsx/xform/style/style-xform.js +118 -0
  329. package/dist/es5/xlsx/xform/style/style-xform.js.map +1 -0
  330. package/dist/es5/xlsx/xform/style/styles-xform.js +611 -0
  331. package/dist/es5/xlsx/xform/style/styles-xform.js.map +1 -0
  332. package/dist/es5/xlsx/xform/style/underline-xform.js +46 -0
  333. package/dist/es5/xlsx/xform/style/underline-xform.js.map +1 -0
  334. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +75 -0
  335. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -0
  336. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +30 -0
  337. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +1 -0
  338. package/dist/es5/xlsx/xform/table/filter-column-xform.js +92 -0
  339. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -0
  340. package/dist/es5/xlsx/xform/table/filter-xform.js +28 -0
  341. package/dist/es5/xlsx/xform/table/filter-xform.js.map +1 -0
  342. package/dist/es5/xlsx/xform/table/table-column-xform.js +42 -0
  343. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +1 -0
  344. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +40 -0
  345. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +1 -0
  346. package/dist/es5/xlsx/xform/table/table-xform.js +125 -0
  347. package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
  348. package/dist/es5/xlsx/xlsx.js +1109 -0
  349. package/dist/es5/xlsx/xlsx.js.map +1 -0
  350. package/dist/es5/xlsx/xml/theme1.js +5 -0
  351. package/dist/es5/xlsx/xml/theme1.js.map +1 -0
  352. package/dist/exceljs.bare.js +65234 -0
  353. package/dist/exceljs.bare.js.map +889 -0
  354. package/dist/exceljs.bare.min.js +45 -0
  355. package/dist/exceljs.bare.min.js.map +1 -0
  356. package/dist/exceljs.js +69987 -0
  357. package/dist/exceljs.js.map +1211 -0
  358. package/dist/exceljs.min.js +45 -0
  359. package/dist/exceljs.min.js.map +1 -0
  360. package/excel.js +13 -0
  361. package/index.d.ts +2041 -0
  362. package/index.ts +2 -0
  363. package/lib/csv/csv.js +191 -0
  364. package/lib/csv/line-buffer.js +74 -0
  365. package/lib/csv/stream-converter.js +135 -0
  366. package/lib/doc/anchor.js +91 -0
  367. package/lib/doc/cell.js +1124 -0
  368. package/lib/doc/column.js +320 -0
  369. package/lib/doc/data/theme1.json +234 -0
  370. package/lib/doc/data-validations.js +19 -0
  371. package/lib/doc/defined-names.js +196 -0
  372. package/lib/doc/enums.js +48 -0
  373. package/lib/doc/form-checkbox.js +336 -0
  374. package/lib/doc/image.js +59 -0
  375. package/lib/doc/modelcontainer.js +18 -0
  376. package/lib/doc/note.js +65 -0
  377. package/lib/doc/pivot-table.js +239 -0
  378. package/lib/doc/range.js +257 -0
  379. package/lib/doc/row.js +424 -0
  380. package/lib/doc/table.js +559 -0
  381. package/lib/doc/workbook.js +240 -0
  382. package/lib/doc/worksheet.js +1041 -0
  383. package/lib/exceljs.bare.js +13 -0
  384. package/lib/exceljs.browser.js +36 -0
  385. package/lib/exceljs.nodejs.js +14 -0
  386. package/lib/stream/xlsx/hyperlink-reader.js +83 -0
  387. package/lib/stream/xlsx/sheet-comments-writer.js +121 -0
  388. package/lib/stream/xlsx/sheet-rels-writer.js +119 -0
  389. package/lib/stream/xlsx/workbook-reader.js +336 -0
  390. package/lib/stream/xlsx/workbook-writer.js +347 -0
  391. package/lib/stream/xlsx/worksheet-reader.js +374 -0
  392. package/lib/stream/xlsx/worksheet-writer.js +717 -0
  393. package/lib/utils/auto-drain.js +15 -0
  394. package/lib/utils/browser-buffer-decode.js +14 -0
  395. package/lib/utils/browser-buffer-encode.js +15 -0
  396. package/lib/utils/cell-matrix.js +165 -0
  397. package/lib/utils/col-cache.js +287 -0
  398. package/lib/utils/copy-style.js +43 -0
  399. package/lib/utils/encryptor.js +55 -0
  400. package/lib/utils/iterate-stream.js +48 -0
  401. package/lib/utils/parse-sax.js +43 -0
  402. package/lib/utils/shared-formula.js +44 -0
  403. package/lib/utils/shared-strings.js +42 -0
  404. package/lib/utils/stream-base64.js +72 -0
  405. package/lib/utils/stream-buf.js +387 -0
  406. package/lib/utils/string-buf.js +82 -0
  407. package/lib/utils/string-builder.js +35 -0
  408. package/lib/utils/stuttered-pipe.js +67 -0
  409. package/lib/utils/typed-stack.js +24 -0
  410. package/lib/utils/under-dash.js +184 -0
  411. package/lib/utils/utils.js +206 -0
  412. package/lib/utils/xml-stream.js +169 -0
  413. package/lib/utils/zip-stream.js +87 -0
  414. package/lib/xlsx/.rels +11 -0
  415. package/lib/xlsx/calcChain.xml +6 -0
  416. package/lib/xlsx/core.xml +7 -0
  417. package/lib/xlsx/defaultnumformats.js +153 -0
  418. package/lib/xlsx/rel-type.js +27 -0
  419. package/lib/xlsx/styles.xml +41 -0
  420. package/lib/xlsx/workbook.xml +16 -0
  421. package/lib/xlsx/xform/base-xform.js +145 -0
  422. package/lib/xlsx/xform/book/defined-name-xform.js +91 -0
  423. package/lib/xlsx/xform/book/sheet-xform.js +34 -0
  424. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -0
  425. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -0
  426. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -0
  427. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -0
  428. package/lib/xlsx/xform/book/workbook-xform.js +265 -0
  429. package/lib/xlsx/xform/comment/comment-xform.js +105 -0
  430. package/lib/xlsx/xform/comment/comments-xform.js +82 -0
  431. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -0
  432. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -0
  433. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -0
  434. package/lib/xlsx/xform/comment/vml-client-data-xform.js +92 -0
  435. package/lib/xlsx/xform/comment/vml-notes-xform.js +217 -0
  436. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -0
  437. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -0
  438. package/lib/xlsx/xform/composite-xform.js +56 -0
  439. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -0
  440. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -0
  441. package/lib/xlsx/xform/core/app-xform.js +100 -0
  442. package/lib/xlsx/xform/core/content-types-xform.js +211 -0
  443. package/lib/xlsx/xform/core/core-xform.js +142 -0
  444. package/lib/xlsx/xform/core/relationship-xform.js +25 -0
  445. package/lib/xlsx/xform/core/relationships-xform.js +73 -0
  446. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -0
  447. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -0
  448. package/lib/xlsx/xform/drawing/blip-xform.js +42 -0
  449. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -0
  450. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -0
  451. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -0
  452. package/lib/xlsx/xform/drawing/ctrl-prop-xform.js +74 -0
  453. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -0
  454. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -0
  455. package/lib/xlsx/xform/drawing/ext-xform.js +44 -0
  456. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -0
  457. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -0
  458. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  459. package/lib/xlsx/xform/drawing/pic-xform.js +77 -0
  460. package/lib/xlsx/xform/drawing/sp-pr.js +17 -0
  461. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  462. package/lib/xlsx/xform/list-xform.js +95 -0
  463. package/lib/xlsx/xform/pivot-table/cache-field.js +74 -0
  464. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -0
  465. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +107 -0
  466. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +265 -0
  467. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -0
  468. package/lib/xlsx/xform/sheet/cell-xform.js +498 -0
  469. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +308 -0
  470. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -0
  471. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -0
  472. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -0
  473. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -0
  474. package/lib/xlsx/xform/sheet/cf/databar-xform.js +56 -0
  475. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -0
  476. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -0
  477. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -0
  478. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -0
  479. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -0
  480. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -0
  481. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -0
  482. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -0
  483. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +102 -0
  484. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -0
  485. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -0
  486. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -0
  487. package/lib/xlsx/xform/sheet/col-xform.js +86 -0
  488. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -0
  489. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -0
  490. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -0
  491. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -0
  492. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -0
  493. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -0
  494. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -0
  495. package/lib/xlsx/xform/sheet/merges.js +56 -0
  496. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -0
  497. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -0
  498. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -0
  499. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -0
  500. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -0
  501. package/lib/xlsx/xform/sheet/picture-xform.js +33 -0
  502. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -0
  503. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -0
  504. package/lib/xlsx/xform/sheet/row-xform.js +145 -0
  505. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +67 -0
  506. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -0
  507. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -0
  508. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -0
  509. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -0
  510. package/lib/xlsx/xform/sheet/worksheet-xform.js +657 -0
  511. package/lib/xlsx/xform/simple/boolean-xform.js +31 -0
  512. package/lib/xlsx/xform/simple/date-xform.js +66 -0
  513. package/lib/xlsx/xform/simple/float-xform.js +51 -0
  514. package/lib/xlsx/xform/simple/integer-xform.js +57 -0
  515. package/lib/xlsx/xform/simple/string-xform.js +51 -0
  516. package/lib/xlsx/xform/static-xform.js +64 -0
  517. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  518. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -0
  519. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -0
  520. package/lib/xlsx/xform/strings/shared-strings-xform.js +132 -0
  521. package/lib/xlsx/xform/strings/text-xform.js +44 -0
  522. package/lib/xlsx/xform/style/alignment-xform.js +172 -0
  523. package/lib/xlsx/xform/style/border-xform.js +207 -0
  524. package/lib/xlsx/xform/style/color-xform.js +63 -0
  525. package/lib/xlsx/xform/style/dxf-xform.js +111 -0
  526. package/lib/xlsx/xform/style/fill-xform.js +364 -0
  527. package/lib/xlsx/xform/style/font-xform.js +102 -0
  528. package/lib/xlsx/xform/style/numfmt-xform.js +63 -0
  529. package/lib/xlsx/xform/style/protection-xform.js +60 -0
  530. package/lib/xlsx/xform/style/style-xform.js +125 -0
  531. package/lib/xlsx/xform/style/styles-xform.js +527 -0
  532. package/lib/xlsx/xform/style/underline-xform.js +47 -0
  533. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -0
  534. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -0
  535. package/lib/xlsx/xform/table/filter-column-xform.js +99 -0
  536. package/lib/xlsx/xform/table/filter-xform.js +31 -0
  537. package/lib/xlsx/xform/table/table-column-xform.js +44 -0
  538. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -0
  539. package/lib/xlsx/xform/table/table-xform.js +134 -0
  540. package/lib/xlsx/xlsx.js +1160 -0
  541. package/lib/xlsx/xml/theme1.js +3 -0
  542. package/lib/xlsx/xml/theme1.xml +318 -0
  543. package/package.json +159 -0
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+
3
+ const colCache = require('../utils/col-cache');
4
+ const {
5
+ objectFromProps,
6
+ range,
7
+ toSortedArray
8
+ } = require('../utils/utils');
9
+
10
+ // TK(2023-10-10): turn this into a class constructor.
11
+
12
+ // IMPORTANT: Pivot tables are NOT supported with streaming API (WorkbookWriter)
13
+ //
14
+ // Pivot tables require reading ALL source data to generate the pivot cache,
15
+ // which conflicts with streaming's one-pass write model. Excel requires complete
16
+ // pivot cache data (all unique values and all data rows) at file creation time.
17
+ //
18
+ // For large datasets, use the standard (non-streaming) Workbook API with pivot tables.
19
+
20
+ function makePivotTable(worksheet, model) {
21
+ // Example `model`:
22
+ // {
23
+ // sourceSheet: worksheet1,
24
+ // rows: ['A', 'B'],
25
+ // columns: ['C'],
26
+ // values: ['E'],
27
+ // pages: ['F'], // optional
28
+ // pageDefaults: { F: 'value' }, // optional
29
+ // metric: 'sum', 'count'
30
+ // startRow: 1, // optional: header row number (default: 1)
31
+ // startCell: 'A1', // optional: pivot table location (default: 'A1')
32
+ // valueNumFmt: '#,##0.00', // optional: number format for value field
33
+ // verbose: false, // optional: show progress logs
34
+ // }
35
+
36
+ validate(worksheet, model);
37
+ const {
38
+ sourceSheet
39
+ } = model;
40
+ let {
41
+ rows,
42
+ columns,
43
+ values,
44
+ pages = []
45
+ } = model;
46
+ const {
47
+ metric,
48
+ pageDefaults = {},
49
+ verbose = false
50
+ } = model;
51
+ const startRow = model.startRow || 1;
52
+
53
+ // Generate sharedItems only for categorical fields (rows, columns, pages).
54
+ // Value fields (values) are numeric aggregations and should NOT have sharedItems,
55
+ // as their raw values are written directly as <n> in cache records.
56
+ // This significantly reduces processing time for wide datasets (e.g. 26 cols × 60k rows).
57
+ if (verbose) {
58
+ // eslint-disable-next-line no-console
59
+ console.log('Generating cache fields...');
60
+ }
61
+ const usedFieldNames = [...model.rows, ...model.columns, ...pages];
62
+ const cacheFields = makeCacheFields(sourceSheet, usedFieldNames, startRow, verbose);
63
+ if (verbose) {
64
+ // eslint-disable-next-line no-console
65
+ console.log(` ✓ Generated ${cacheFields.length} cache fields (${usedFieldNames.length} with sharedItems)`);
66
+ }
67
+
68
+ // Calculate the source data range for the pivot cache
69
+ // The range should start from the header row (startRow) to the last row with data
70
+ const dimensions = sourceSheet.dimensions;
71
+ const sourceDataRange = dimensions ? colCache.encode(startRow, dimensions.left, dimensions.bottom, dimensions.right) : null;
72
+
73
+ // let {rows, columns, values, pages} use indices instead of names;
74
+ // names can then be accessed via `pivotTable.cacheFields[index].name`.
75
+ // *Note*: Using `reduce` as `Object.fromEntries` requires Node 12+;
76
+ // ExcelJS is >=8.3.0 (as of 2023-10-08).
77
+ const nameToIndex = cacheFields.reduce((result, cacheField, index) => {
78
+ result[cacheField.name] = index;
79
+ return result;
80
+ }, {});
81
+ rows = rows.map(row => nameToIndex[row]);
82
+ columns = columns.map(column => nameToIndex[column]);
83
+ values = values.map(value => nameToIndex[value]);
84
+ pages = pages.map(page => nameToIndex[page]);
85
+
86
+ // Generate unique cache ID based on the number of existing pivot tables
87
+ // Each pivot table gets its own cache ID (starting from 10)
88
+ const cacheId = String(10 + worksheet.workbook.pivotTables.length);
89
+
90
+ // Convert pageDefaults from field names to indices with item indices
91
+ const pageDefaultsIndices = {};
92
+ for (const [fieldName, defaultValue] of Object.entries(pageDefaults)) {
93
+ const fieldIndex = nameToIndex[fieldName];
94
+ if (fieldIndex !== undefined) {
95
+ const cacheField = cacheFields[fieldIndex];
96
+ if (cacheField.sharedItems) {
97
+ // Find the item index for the default value
98
+ const itemIndex = cacheField.sharedItems.findIndex(item => item === defaultValue);
99
+ if (itemIndex >= 0) {
100
+ pageDefaultsIndices[fieldIndex] = itemIndex;
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ // form pivot table object
107
+ return {
108
+ sourceSheet,
109
+ rows,
110
+ columns,
111
+ values,
112
+ pages,
113
+ pageDefaults: pageDefaultsIndices,
114
+ metric,
115
+ cacheFields,
116
+ // defined in <pivotTableDefinition> of xl/pivotTables/pivotTableN.xml;
117
+ // also used in xl/workbook.xml
118
+ cacheId,
119
+ // Control whether pivot table style overrides worksheet column widths
120
+ // '0' = preserve worksheet column widths (useful for custom sizing)
121
+ // '1' = apply pivot table style width/height (default Excel behavior)
122
+ applyWidthHeightFormats: model.applyWidthHeightFormats !== undefined ? model.applyWidthHeightFormats : '1',
123
+ // Data starts from this row (startRow + 1)
124
+ dataStartRow: startRow + 1,
125
+ // Source data range for the pivot cache (from header row to last data row)
126
+ sourceDataRange,
127
+ // Pivot table location on the destination sheet
128
+ startCell: model.startCell || 'A1',
129
+ // Number format for the value field (e.g. '#,##0.00' for currency)
130
+ valueNumFmt: model.valueNumFmt || null
131
+ };
132
+ }
133
+ function validate(worksheet, model) {
134
+ // Note: Multiple pivot tables are now supported
135
+
136
+ if (model.metric && model.metric !== 'sum' && model.metric !== 'count') {
137
+ throw new Error('Only the "sum" and "count" metric is supported at this time.');
138
+ }
139
+ const startRow = model.startRow || 1;
140
+ const headerNames = model.sourceSheet.getRow(startRow).values.slice(1);
141
+ const isInHeaderNames = objectFromProps(headerNames, true);
142
+ const pages = model.pages || [];
143
+ for (const name of [...model.rows, ...model.columns, ...model.values, ...pages]) {
144
+ if (!isInHeaderNames[name]) {
145
+ throw new Error(`The header name "${name}" was not found in ${model.sourceSheet.name}.`);
146
+ }
147
+ }
148
+ if (!model.rows.length) {
149
+ throw new Error('No pivot table rows specified.');
150
+ }
151
+ if (!model.columns.length) {
152
+ throw new Error('No pivot table columns specified.');
153
+ }
154
+ if (model.values.length !== 1) {
155
+ throw new Error('Exactly 1 value needs to be specified at this time.');
156
+ }
157
+
158
+ // Validate page fields don't overlap with rows/columns/values
159
+ const allFields = [...model.rows, ...model.columns, ...model.values];
160
+ for (const pageField of pages) {
161
+ if (allFields.includes(pageField)) {
162
+ throw new Error(`Page field "${pageField}" cannot also be used as a row, column, or value field.`);
163
+ }
164
+ }
165
+
166
+ // Validate pageDefaults reference valid page fields and values
167
+ if (model.pageDefaults) {
168
+ for (const [fieldName, defaultValue] of Object.entries(model.pageDefaults)) {
169
+ if (!pages.includes(fieldName)) {
170
+ throw new Error(`pageDefaults field "${fieldName}" is not in the pages array.`);
171
+ }
172
+ }
173
+ }
174
+ }
175
+ function makeCacheFields(worksheet, fieldNamesWithSharedItems) {
176
+ let startRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
177
+ let verbose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
178
+ // Cache fields are used in pivot tables to reference source data.
179
+ //
180
+ // Example
181
+ // -------
182
+ // Turn
183
+ //
184
+ // `worksheet` sheet values [
185
+ // ['A', 'B', 'C', 'D', 'E'],
186
+ // ['a1', 'b1', 'c1', 4, 5],
187
+ // ['a1', 'b2', 'c1', 4, 5],
188
+ // ['a2', 'b1', 'c2', 14, 24],
189
+ // ['a2', 'b2', 'c2', 24, 35],
190
+ // ['a3', 'b1', 'c3', 34, 45],
191
+ // ['a3', 'b2', 'c3', 44, 45]
192
+ // ];
193
+ // fieldNamesWithSharedItems = ['A', 'B', 'C'];
194
+ // startRow = 1 (default, header row)
195
+ //
196
+ // into
197
+ //
198
+ // [
199
+ // { name: 'A', sharedItems: ['a1', 'a2', 'a3'] },
200
+ // { name: 'B', sharedItems: ['b1', 'b2'] },
201
+ // { name: 'C', sharedItems: ['c1', 'c2', 'c3'] },
202
+ // { name: 'D', sharedItems: null },
203
+ // { name: 'E', sharedItems: null }
204
+ // ]
205
+
206
+ const names = worksheet.getRow(startRow).values;
207
+ const nameToHasSharedItems = objectFromProps(fieldNamesWithSharedItems, true);
208
+ const totalColumns = names.length - 1;
209
+ const aggregate = (columnIndex, fieldName) => {
210
+ if (verbose && nameToHasSharedItems[fieldName]) {
211
+ // eslint-disable-next-line no-console
212
+ console.log(` Processing column ${columnIndex}/${totalColumns}: ${fieldName}`);
213
+ }
214
+ const columnValues = worksheet.getColumn(columnIndex).values.slice(startRow + 1);
215
+
216
+ // Deduplicate case-insensitively for Excel compatibility
217
+ // Excel treats pivot table values as case-insensitive, so "Apple" and "apple"
218
+ // are considered the same value. We keep the first occurrence of each case-insensitive variant.
219
+ const seen = new Map(); // lowercase -> first occurrence
220
+ const uniqueValues = [];
221
+ for (const value of columnValues) {
222
+ if (value === null || value === undefined) continue;
223
+ const key = typeof value === 'string' ? value.toLowerCase() : value;
224
+ if (!seen.has(key)) {
225
+ seen.set(key, value);
226
+ uniqueValues.push(value);
227
+ }
228
+ }
229
+ return toSortedArray(uniqueValues);
230
+ };
231
+
232
+ // make result
233
+ const result = [];
234
+ for (const columnIndex of range(1, names.length)) {
235
+ const name = names[columnIndex];
236
+ const sharedItems = nameToHasSharedItems[name] ? aggregate(columnIndex, name) : null;
237
+ result.push({
238
+ name,
239
+ sharedItems
240
+ });
241
+ }
242
+ return result;
243
+ }
244
+ module.exports = {
245
+ makePivotTable
246
+ };
247
+ //# sourceMappingURL=pivot-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot-table.js","names":["colCache","require","objectFromProps","range","toSortedArray","makePivotTable","worksheet","model","validate","sourceSheet","rows","columns","values","pages","metric","pageDefaults","verbose","startRow","console","log","usedFieldNames","cacheFields","makeCacheFields","length","dimensions","sourceDataRange","encode","left","bottom","right","nameToIndex","reduce","result","cacheField","index","name","map","row","column","value","page","cacheId","String","workbook","pivotTables","pageDefaultsIndices","fieldName","defaultValue","Object","entries","fieldIndex","undefined","sharedItems","itemIndex","findIndex","item","applyWidthHeightFormats","dataStartRow","startCell","valueNumFmt","Error","headerNames","getRow","slice","isInHeaderNames","allFields","pageField","includes","fieldNamesWithSharedItems","arguments","names","nameToHasSharedItems","totalColumns","aggregate","columnIndex","columnValues","getColumn","seen","Map","uniqueValues","key","toLowerCase","has","set","push","module","exports"],"sources":["../../../lib/doc/pivot-table.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\r\nconst {objectFromProps, range, toSortedArray} = require('../utils/utils');\r\n\r\n// TK(2023-10-10): turn this into a class constructor.\r\n\r\n// IMPORTANT: Pivot tables are NOT supported with streaming API (WorkbookWriter)\r\n//\r\n// Pivot tables require reading ALL source data to generate the pivot cache,\r\n// which conflicts with streaming's one-pass write model. Excel requires complete\r\n// pivot cache data (all unique values and all data rows) at file creation time.\r\n//\r\n// For large datasets, use the standard (non-streaming) Workbook API with pivot tables.\r\n\r\nfunction makePivotTable(worksheet, model) {\r\n // Example `model`:\r\n // {\r\n // sourceSheet: worksheet1,\r\n // rows: ['A', 'B'],\r\n // columns: ['C'],\r\n // values: ['E'],\r\n // pages: ['F'], // optional\r\n // pageDefaults: { F: 'value' }, // optional\r\n // metric: 'sum', 'count'\r\n // startRow: 1, // optional: header row number (default: 1)\r\n // startCell: 'A1', // optional: pivot table location (default: 'A1')\r\n // valueNumFmt: '#,##0.00', // optional: number format for value field\r\n // verbose: false, // optional: show progress logs\r\n // }\r\n\r\n validate(worksheet, model);\r\n\r\n const {sourceSheet} = model;\r\n let {rows, columns, values, pages = []} = model;\r\n const {metric, pageDefaults = {}, verbose = false} = model;\r\n const startRow = model.startRow || 1;\r\n\r\n // Generate sharedItems only for categorical fields (rows, columns, pages).\r\n // Value fields (values) are numeric aggregations and should NOT have sharedItems,\r\n // as their raw values are written directly as <n> in cache records.\r\n // This significantly reduces processing time for wide datasets (e.g. 26 cols × 60k rows).\r\n if (verbose) {\r\n // eslint-disable-next-line no-console\r\n console.log('Generating cache fields...');\r\n }\r\n const usedFieldNames = [...model.rows, ...model.columns, ...pages];\r\n const cacheFields = makeCacheFields(sourceSheet, usedFieldNames, startRow, verbose);\r\n if (verbose) {\r\n // eslint-disable-next-line no-console\r\n console.log(` ✓ Generated ${cacheFields.length} cache fields (${usedFieldNames.length} with sharedItems)`);\r\n }\r\n\r\n // Calculate the source data range for the pivot cache\r\n // The range should start from the header row (startRow) to the last row with data\r\n const dimensions = sourceSheet.dimensions;\r\n const sourceDataRange = dimensions\r\n ? colCache.encode(startRow, dimensions.left, dimensions.bottom, dimensions.right)\r\n : null;\r\n\r\n // let {rows, columns, values, pages} use indices instead of names;\r\n // names can then be accessed via `pivotTable.cacheFields[index].name`.\r\n // *Note*: Using `reduce` as `Object.fromEntries` requires Node 12+;\r\n // ExcelJS is >=8.3.0 (as of 2023-10-08).\r\n const nameToIndex = cacheFields.reduce((result, cacheField, index) => {\r\n result[cacheField.name] = index;\r\n return result;\r\n }, {});\r\n rows = rows.map(row => nameToIndex[row]);\r\n columns = columns.map(column => nameToIndex[column]);\r\n values = values.map(value => nameToIndex[value]);\r\n pages = pages.map(page => nameToIndex[page]);\r\n\r\n // Generate unique cache ID based on the number of existing pivot tables\r\n // Each pivot table gets its own cache ID (starting from 10)\r\n const cacheId = String(10 + worksheet.workbook.pivotTables.length);\r\n\r\n // Convert pageDefaults from field names to indices with item indices\r\n const pageDefaultsIndices = {};\r\n for (const [fieldName, defaultValue] of Object.entries(pageDefaults)) {\r\n const fieldIndex = nameToIndex[fieldName];\r\n if (fieldIndex !== undefined) {\r\n const cacheField = cacheFields[fieldIndex];\r\n if (cacheField.sharedItems) {\r\n // Find the item index for the default value\r\n const itemIndex = cacheField.sharedItems.findIndex(item => item === defaultValue);\r\n if (itemIndex >= 0) {\r\n pageDefaultsIndices[fieldIndex] = itemIndex;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // form pivot table object\r\n return {\r\n sourceSheet,\r\n rows,\r\n columns,\r\n values,\r\n pages,\r\n pageDefaults: pageDefaultsIndices,\r\n metric,\r\n cacheFields,\r\n // defined in <pivotTableDefinition> of xl/pivotTables/pivotTableN.xml;\r\n // also used in xl/workbook.xml\r\n cacheId,\r\n // Control whether pivot table style overrides worksheet column widths\r\n // '0' = preserve worksheet column widths (useful for custom sizing)\r\n // '1' = apply pivot table style width/height (default Excel behavior)\r\n applyWidthHeightFormats:\r\n model.applyWidthHeightFormats !== undefined ? model.applyWidthHeightFormats : '1',\r\n // Data starts from this row (startRow + 1)\r\n dataStartRow: startRow + 1,\r\n // Source data range for the pivot cache (from header row to last data row)\r\n sourceDataRange,\r\n // Pivot table location on the destination sheet\r\n startCell: model.startCell || 'A1',\r\n // Number format for the value field (e.g. '#,##0.00' for currency)\r\n valueNumFmt: model.valueNumFmt || null,\r\n };\r\n}\r\n\r\nfunction validate(worksheet, model) {\r\n // Note: Multiple pivot tables are now supported\r\n\r\n if (model.metric && model.metric !== 'sum' && model.metric !== 'count') {\r\n throw new Error('Only the \"sum\" and \"count\" metric is supported at this time.');\r\n }\r\n\r\n const startRow = model.startRow || 1;\r\n const headerNames = model.sourceSheet.getRow(startRow).values.slice(1);\r\n const isInHeaderNames = objectFromProps(headerNames, true);\r\n const pages = model.pages || [];\r\n for (const name of [...model.rows, ...model.columns, ...model.values, ...pages]) {\r\n if (!isInHeaderNames[name]) {\r\n throw new Error(`The header name \"${name}\" was not found in ${model.sourceSheet.name}.`);\r\n }\r\n }\r\n\r\n if (!model.rows.length) {\r\n throw new Error('No pivot table rows specified.');\r\n }\r\n\r\n if (!model.columns.length) {\r\n throw new Error('No pivot table columns specified.');\r\n }\r\n\r\n if (model.values.length !== 1) {\r\n throw new Error('Exactly 1 value needs to be specified at this time.');\r\n }\r\n\r\n // Validate page fields don't overlap with rows/columns/values\r\n const allFields = [...model.rows, ...model.columns, ...model.values];\r\n for (const pageField of pages) {\r\n if (allFields.includes(pageField)) {\r\n throw new Error(\r\n `Page field \"${pageField}\" cannot also be used as a row, column, or value field.`,\r\n );\r\n }\r\n }\r\n\r\n // Validate pageDefaults reference valid page fields and values\r\n if (model.pageDefaults) {\r\n for (const [fieldName, defaultValue] of Object.entries(model.pageDefaults)) {\r\n if (!pages.includes(fieldName)) {\r\n throw new Error(`pageDefaults field \"${fieldName}\" is not in the pages array.`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction makeCacheFields(worksheet, fieldNamesWithSharedItems, startRow = 1, verbose = false) {\r\n // Cache fields are used in pivot tables to reference source data.\r\n //\r\n // Example\r\n // -------\r\n // Turn\r\n //\r\n // `worksheet` sheet values [\r\n // ['A', 'B', 'C', 'D', 'E'],\r\n // ['a1', 'b1', 'c1', 4, 5],\r\n // ['a1', 'b2', 'c1', 4, 5],\r\n // ['a2', 'b1', 'c2', 14, 24],\r\n // ['a2', 'b2', 'c2', 24, 35],\r\n // ['a3', 'b1', 'c3', 34, 45],\r\n // ['a3', 'b2', 'c3', 44, 45]\r\n // ];\r\n // fieldNamesWithSharedItems = ['A', 'B', 'C'];\r\n // startRow = 1 (default, header row)\r\n //\r\n // into\r\n //\r\n // [\r\n // { name: 'A', sharedItems: ['a1', 'a2', 'a3'] },\r\n // { name: 'B', sharedItems: ['b1', 'b2'] },\r\n // { name: 'C', sharedItems: ['c1', 'c2', 'c3'] },\r\n // { name: 'D', sharedItems: null },\r\n // { name: 'E', sharedItems: null }\r\n // ]\r\n\r\n const names = worksheet.getRow(startRow).values;\r\n const nameToHasSharedItems = objectFromProps(fieldNamesWithSharedItems, true);\r\n const totalColumns = names.length - 1;\r\n\r\n const aggregate = (columnIndex, fieldName) => {\r\n if (verbose && nameToHasSharedItems[fieldName]) {\r\n // eslint-disable-next-line no-console\r\n console.log(` Processing column ${columnIndex}/${totalColumns}: ${fieldName}`);\r\n }\r\n const columnValues = worksheet.getColumn(columnIndex).values.slice(startRow + 1);\r\n\r\n // Deduplicate case-insensitively for Excel compatibility\r\n // Excel treats pivot table values as case-insensitive, so \"Apple\" and \"apple\"\r\n // are considered the same value. We keep the first occurrence of each case-insensitive variant.\r\n const seen = new Map(); // lowercase -> first occurrence\r\n const uniqueValues = [];\r\n\r\n for (const value of columnValues) {\r\n if (value === null || value === undefined) continue;\r\n\r\n const key = typeof value === 'string' ? value.toLowerCase() : value;\r\n if (!seen.has(key)) {\r\n seen.set(key, value);\r\n uniqueValues.push(value);\r\n }\r\n }\r\n\r\n return toSortedArray(uniqueValues);\r\n };\r\n\r\n // make result\r\n const result = [];\r\n for (const columnIndex of range(1, names.length)) {\r\n const name = names[columnIndex];\r\n const sharedItems = nameToHasSharedItems[name] ? aggregate(columnIndex, name) : null;\r\n result.push({name, sharedItems});\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {makePivotTable};\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+
3
+ const colCache = require('../utils/col-cache');
4
+
5
+ // used by worksheet to calculate sheet dimensions
6
+ class Range {
7
+ constructor() {
8
+ this.decode(arguments);
9
+ }
10
+ setTLBR(t, l, b, r, s) {
11
+ if (arguments.length < 4) {
12
+ // setTLBR(tl, br, s)
13
+ const tl = colCache.decodeAddress(t);
14
+ const br = colCache.decodeAddress(l);
15
+ this.model = {
16
+ top: Math.min(tl.row, br.row),
17
+ left: Math.min(tl.col, br.col),
18
+ bottom: Math.max(tl.row, br.row),
19
+ right: Math.max(tl.col, br.col),
20
+ sheetName: b
21
+ };
22
+ this.setTLBR(tl.row, tl.col, br.row, br.col, s);
23
+ } else {
24
+ // setTLBR(t, l, b, r, s)
25
+ this.model = {
26
+ top: Math.min(t, b),
27
+ left: Math.min(l, r),
28
+ bottom: Math.max(t, b),
29
+ right: Math.max(l, r),
30
+ sheetName: s
31
+ };
32
+ }
33
+ }
34
+ decode(argv) {
35
+ switch (argv.length) {
36
+ case 5:
37
+ // [t,l,b,r,s]
38
+ this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);
39
+ break;
40
+ case 4:
41
+ // [t,l,b,r]
42
+ this.setTLBR(argv[0], argv[1], argv[2], argv[3]);
43
+ break;
44
+ case 3:
45
+ // [tl,br,s]
46
+ this.setTLBR(argv[0], argv[1], argv[2]);
47
+ break;
48
+ case 2:
49
+ // [tl,br]
50
+ this.setTLBR(argv[0], argv[1]);
51
+ break;
52
+ case 1:
53
+ {
54
+ const value = argv[0];
55
+ if (value instanceof Range) {
56
+ // copy constructor
57
+ this.model = {
58
+ top: value.model.top,
59
+ left: value.model.left,
60
+ bottom: value.model.bottom,
61
+ right: value.model.right,
62
+ sheetName: value.sheetName
63
+ };
64
+ } else if (value instanceof Array) {
65
+ // an arguments array
66
+ this.decode(value);
67
+ } else if (value.top && value.left && value.bottom && value.right) {
68
+ // a model
69
+ this.model = {
70
+ top: value.top,
71
+ left: value.left,
72
+ bottom: value.bottom,
73
+ right: value.right,
74
+ sheetName: value.sheetName
75
+ };
76
+ } else {
77
+ // [sheetName!]tl:br
78
+ const tlbr = colCache.decodeEx(value);
79
+ if (tlbr.top) {
80
+ this.model = {
81
+ top: tlbr.top,
82
+ left: tlbr.left,
83
+ bottom: tlbr.bottom,
84
+ right: tlbr.right,
85
+ sheetName: tlbr.sheetName
86
+ };
87
+ } else {
88
+ this.model = {
89
+ top: tlbr.row,
90
+ left: tlbr.col,
91
+ bottom: tlbr.row,
92
+ right: tlbr.col,
93
+ sheetName: tlbr.sheetName
94
+ };
95
+ }
96
+ }
97
+ break;
98
+ }
99
+ case 0:
100
+ this.model = {
101
+ top: 0,
102
+ left: 0,
103
+ bottom: 0,
104
+ right: 0
105
+ };
106
+ break;
107
+ default:
108
+ throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);
109
+ }
110
+ }
111
+ get top() {
112
+ return this.model.top || 1;
113
+ }
114
+ set top(value) {
115
+ this.model.top = value;
116
+ }
117
+ get left() {
118
+ return this.model.left || 1;
119
+ }
120
+ set left(value) {
121
+ this.model.left = value;
122
+ }
123
+ get bottom() {
124
+ return this.model.bottom || 1;
125
+ }
126
+ set bottom(value) {
127
+ this.model.bottom = value;
128
+ }
129
+ get right() {
130
+ return this.model.right || 1;
131
+ }
132
+ set right(value) {
133
+ this.model.right = value;
134
+ }
135
+ get sheetName() {
136
+ return this.model.sheetName;
137
+ }
138
+ set sheetName(value) {
139
+ this.model.sheetName = value;
140
+ }
141
+ get _serialisedSheetName() {
142
+ const {
143
+ sheetName
144
+ } = this.model;
145
+ if (sheetName) {
146
+ if (/^[a-zA-Z0-9]*$/.test(sheetName)) {
147
+ return `${sheetName}!`;
148
+ }
149
+ return `'${sheetName}'!`;
150
+ }
151
+ return '';
152
+ }
153
+ expand(top, left, bottom, right) {
154
+ if (!this.model.top || top < this.top) this.top = top;
155
+ if (!this.model.left || left < this.left) this.left = left;
156
+ if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;
157
+ if (!this.model.right || right > this.right) this.right = right;
158
+ }
159
+ expandRow(row) {
160
+ if (row) {
161
+ const {
162
+ dimensions,
163
+ number
164
+ } = row;
165
+ if (dimensions) {
166
+ this.expand(number, dimensions.min, number, dimensions.max);
167
+ }
168
+ }
169
+ }
170
+ expandToAddress(addressStr) {
171
+ const address = colCache.decodeEx(addressStr);
172
+ this.expand(address.row, address.col, address.row, address.col);
173
+ }
174
+ get tl() {
175
+ return colCache.n2l(this.left) + this.top;
176
+ }
177
+ get $t$l() {
178
+ return `$${colCache.n2l(this.left)}$${this.top}`;
179
+ }
180
+ get br() {
181
+ return colCache.n2l(this.right) + this.bottom;
182
+ }
183
+ get $b$r() {
184
+ return `$${colCache.n2l(this.right)}$${this.bottom}`;
185
+ }
186
+ get range() {
187
+ return `${this._serialisedSheetName + this.tl}:${this.br}`;
188
+ }
189
+ get $range() {
190
+ return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;
191
+ }
192
+ get shortRange() {
193
+ return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;
194
+ }
195
+ get $shortRange() {
196
+ return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;
197
+ }
198
+ get count() {
199
+ return (1 + this.bottom - this.top) * (1 + this.right - this.left);
200
+ }
201
+ toString() {
202
+ return this.range;
203
+ }
204
+ intersects(other) {
205
+ if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;
206
+ if (other.bottom < this.top) return false;
207
+ if (other.top > this.bottom) return false;
208
+ if (other.right < this.left) return false;
209
+ if (other.left > this.right) return false;
210
+ return true;
211
+ }
212
+ contains(addressStr) {
213
+ const address = colCache.decodeEx(addressStr);
214
+ return this.containsEx(address);
215
+ }
216
+ containsEx(address) {
217
+ if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;
218
+ return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right;
219
+ }
220
+ forEachAddress(cb) {
221
+ for (let col = this.left; col <= this.right; col++) {
222
+ for (let row = this.top; row <= this.bottom; row++) {
223
+ cb(colCache.encodeAddress(row, col), row, col);
224
+ }
225
+ }
226
+ }
227
+ }
228
+ module.exports = Range;
229
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","names":["colCache","require","Range","constructor","decode","arguments","setTLBR","t","l","b","r","s","length","tl","decodeAddress","br","model","top","Math","min","row","left","col","bottom","max","right","sheetName","argv","value","Array","tlbr","decodeEx","Error","_serialisedSheetName","test","expand","expandRow","dimensions","number","expandToAddress","addressStr","address","n2l","$t$l","$b$r","range","$range","shortRange","count","$shortRange","toString","intersects","other","contains","containsEx","forEachAddress","cb","encodeAddress","module","exports"],"sources":["../../../lib/doc/range.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\r\n\r\n// used by worksheet to calculate sheet dimensions\r\nclass Range {\r\n constructor() {\r\n this.decode(arguments);\r\n }\r\n\r\n setTLBR(t, l, b, r, s) {\r\n if (arguments.length < 4) {\r\n // setTLBR(tl, br, s)\r\n const tl = colCache.decodeAddress(t);\r\n const br = colCache.decodeAddress(l);\r\n this.model = {\r\n top: Math.min(tl.row, br.row),\r\n left: Math.min(tl.col, br.col),\r\n bottom: Math.max(tl.row, br.row),\r\n right: Math.max(tl.col, br.col),\r\n sheetName: b,\r\n };\r\n\r\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\r\n } else {\r\n // setTLBR(t, l, b, r, s)\r\n this.model = {\r\n top: Math.min(t, b),\r\n left: Math.min(l, r),\r\n bottom: Math.max(t, b),\r\n right: Math.max(l, r),\r\n sheetName: s,\r\n };\r\n }\r\n }\r\n\r\n decode(argv) {\r\n switch (argv.length) {\r\n case 5: // [t,l,b,r,s]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\r\n break;\r\n case 4: // [t,l,b,r]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\r\n break;\r\n\r\n case 3: // [tl,br,s]\r\n this.setTLBR(argv[0], argv[1], argv[2]);\r\n break;\r\n case 2: // [tl,br]\r\n this.setTLBR(argv[0], argv[1]);\r\n break;\r\n\r\n case 1: {\r\n const value = argv[0];\r\n if (value instanceof Range) {\r\n // copy constructor\r\n this.model = {\r\n top: value.model.top,\r\n left: value.model.left,\r\n bottom: value.model.bottom,\r\n right: value.model.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else if (value instanceof Array) {\r\n // an arguments array\r\n this.decode(value);\r\n } else if (value.top && value.left && value.bottom && value.right) {\r\n // a model\r\n this.model = {\r\n top: value.top,\r\n left: value.left,\r\n bottom: value.bottom,\r\n right: value.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else {\r\n // [sheetName!]tl:br\r\n const tlbr = colCache.decodeEx(value);\r\n if (tlbr.top) {\r\n this.model = {\r\n top: tlbr.top,\r\n left: tlbr.left,\r\n bottom: tlbr.bottom,\r\n right: tlbr.right,\r\n sheetName: tlbr.sheetName,\r\n };\r\n } else {\r\n this.model = {\r\n top: tlbr.row,\r\n left: tlbr.col,\r\n bottom: tlbr.row,\r\n right: tlbr.col,\r\n sheetName: tlbr.sheetName,\r\n };\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case 0:\r\n this.model = {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\r\n }\r\n }\r\n\r\n get top() {\r\n return this.model.top || 1;\r\n }\r\n\r\n set top(value) {\r\n this.model.top = value;\r\n }\r\n\r\n get left() {\r\n return this.model.left || 1;\r\n }\r\n\r\n set left(value) {\r\n this.model.left = value;\r\n }\r\n\r\n get bottom() {\r\n return this.model.bottom || 1;\r\n }\r\n\r\n set bottom(value) {\r\n this.model.bottom = value;\r\n }\r\n\r\n get right() {\r\n return this.model.right || 1;\r\n }\r\n\r\n set right(value) {\r\n this.model.right = value;\r\n }\r\n\r\n get sheetName() {\r\n return this.model.sheetName;\r\n }\r\n\r\n set sheetName(value) {\r\n this.model.sheetName = value;\r\n }\r\n\r\n get _serialisedSheetName() {\r\n const {sheetName} = this.model;\r\n if (sheetName) {\r\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\r\n return `${sheetName}!`;\r\n }\r\n return `'${sheetName}'!`;\r\n }\r\n return '';\r\n }\r\n\r\n expand(top, left, bottom, right) {\r\n if (!this.model.top || top < this.top) this.top = top;\r\n if (!this.model.left || left < this.left) this.left = left;\r\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\r\n if (!this.model.right || right > this.right) this.right = right;\r\n }\r\n\r\n expandRow(row) {\r\n if (row) {\r\n const {dimensions, number} = row;\r\n if (dimensions) {\r\n this.expand(number, dimensions.min, number, dimensions.max);\r\n }\r\n }\r\n }\r\n\r\n expandToAddress(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n this.expand(address.row, address.col, address.row, address.col);\r\n }\r\n\r\n get tl() {\r\n return colCache.n2l(this.left) + this.top;\r\n }\r\n\r\n get $t$l() {\r\n return `$${colCache.n2l(this.left)}$${this.top}`;\r\n }\r\n\r\n get br() {\r\n return colCache.n2l(this.right) + this.bottom;\r\n }\r\n\r\n get $b$r() {\r\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\r\n }\r\n\r\n get range() {\r\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\r\n }\r\n\r\n get $range() {\r\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\r\n }\r\n\r\n get shortRange() {\r\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\r\n }\r\n\r\n get $shortRange() {\r\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\r\n }\r\n\r\n get count() {\r\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\r\n }\r\n\r\n toString() {\r\n return this.range;\r\n }\r\n\r\n intersects(other) {\r\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\r\n if (other.bottom < this.top) return false;\r\n if (other.top > this.bottom) return false;\r\n if (other.right < this.left) return false;\r\n if (other.left > this.right) return false;\r\n return true;\r\n }\r\n\r\n contains(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n return this.containsEx(address);\r\n }\r\n\r\n containsEx(address) {\r\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\r\n return (\r\n address.row >= this.top &&\r\n address.row <= this.bottom &&\r\n address.col >= this.left &&\r\n address.col <= this.right\r\n );\r\n }\r\n\r\n forEachAddress(cb) {\r\n for (let col = this.left; col <= this.right; col++) {\r\n for (let row = this.top; row <= this.bottom; row++) {\r\n cb(colCache.encodeAddress(row, col), row, col);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Range;\r\n"],"mappings":"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","ignoreList":[]}