@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,91 @@
1
+ "use strict";
2
+
3
+ const BaseXform = require('./base-xform');
4
+ class ListXform extends BaseXform {
5
+ constructor(options) {
6
+ super();
7
+ this.tag = options.tag;
8
+ this.always = !!options.always;
9
+ this.count = options.count;
10
+ this.empty = options.empty;
11
+ this.$count = options.$count || 'count';
12
+ this.$ = options.$;
13
+ this.childXform = options.childXform;
14
+ this.maxItems = options.maxItems;
15
+ }
16
+ prepare(model, options) {
17
+ const {
18
+ childXform
19
+ } = this;
20
+ if (model) {
21
+ model.forEach((childModel, index) => {
22
+ options.index = index;
23
+ childXform.prepare(childModel, options);
24
+ });
25
+ }
26
+ }
27
+ render(xmlStream, model) {
28
+ if (this.always || model && model.length) {
29
+ xmlStream.openNode(this.tag, this.$);
30
+ if (this.count) {
31
+ xmlStream.addAttribute(this.$count, model && model.length || 0);
32
+ }
33
+ const {
34
+ childXform
35
+ } = this;
36
+ (model || []).forEach((childModel, index) => {
37
+ childXform.render(xmlStream, childModel, index);
38
+ });
39
+ xmlStream.closeNode();
40
+ } else if (this.empty) {
41
+ xmlStream.leafNode(this.tag);
42
+ }
43
+ }
44
+ parseOpen(node) {
45
+ if (this.parser) {
46
+ this.parser.parseOpen(node);
47
+ return true;
48
+ }
49
+ switch (node.name) {
50
+ case this.tag:
51
+ this.model = [];
52
+ return true;
53
+ default:
54
+ if (this.childXform.parseOpen(node)) {
55
+ this.parser = this.childXform;
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+ }
61
+ parseText(text) {
62
+ if (this.parser) {
63
+ this.parser.parseText(text);
64
+ }
65
+ }
66
+ parseClose(name) {
67
+ if (this.parser) {
68
+ if (!this.parser.parseClose(name)) {
69
+ this.model.push(this.parser.model);
70
+ this.parser = undefined;
71
+ if (this.maxItems && this.model.length > this.maxItems) {
72
+ throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);
73
+ }
74
+ }
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ reconcile(model, options) {
80
+ if (model) {
81
+ const {
82
+ childXform
83
+ } = this;
84
+ model.forEach(childModel => {
85
+ childXform.reconcile(childModel, options);
86
+ });
87
+ }
88
+ }
89
+ }
90
+ module.exports = ListXform;
91
+ //# sourceMappingURL=list-xform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-xform.js","names":["BaseXform","require","ListXform","constructor","options","tag","always","count","empty","$count","$","childXform","maxItems","prepare","model","forEach","childModel","index","render","xmlStream","length","openNode","addAttribute","closeNode","leafNode","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined","Error","reconcile","module","exports"],"sources":["../../../../lib/xlsx/xform/list-xform.js"],"sourcesContent":["const BaseXform = require('./base-xform');\r\n\r\nclass ListXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.always = !!options.always;\r\n this.count = options.count;\r\n this.empty = options.empty;\r\n this.$count = options.$count || 'count';\r\n this.$ = options.$;\r\n this.childXform = options.childXform;\r\n this.maxItems = options.maxItems;\r\n }\r\n\r\n prepare(model, options) {\r\n const {childXform} = this;\r\n if (model) {\r\n model.forEach((childModel, index) => {\r\n options.index = index;\r\n childXform.prepare(childModel, options);\r\n });\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (this.always || (model && model.length)) {\r\n xmlStream.openNode(this.tag, this.$);\r\n if (this.count) {\r\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\r\n }\r\n\r\n const {childXform} = this;\r\n (model || []).forEach((childModel, index) => {\r\n childXform.render(xmlStream, childModel, index);\r\n });\r\n\r\n xmlStream.closeNode();\r\n } else if (this.empty) {\r\n xmlStream.leafNode(this.tag);\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = [];\r\n return true;\r\n default:\r\n if (this.childXform.parseOpen(node)) {\r\n this.parser = this.childXform;\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.push(this.parser.model);\r\n this.parser = undefined;\r\n\r\n if (this.maxItems && this.model.length > this.maxItems) {\r\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n reconcile(model, options) {\r\n if (model) {\r\n const {childXform} = this;\r\n model.forEach(childModel => {\r\n childXform.reconcile(childModel, options);\r\n });\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = ListXform;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ class CacheField {
4
+ constructor(_ref) {
5
+ let {
6
+ name,
7
+ sharedItems
8
+ } = _ref;
9
+ // string type
10
+ //
11
+ // {
12
+ // 'name': 'A',
13
+ // 'sharedItems': ['a1', 'a2', 'a3']
14
+ // }
15
+ //
16
+ // or
17
+ //
18
+ // integer type
19
+ //
20
+ // {
21
+ // 'name': 'D',
22
+ // 'sharedItems': null
23
+ // }
24
+ this.name = name;
25
+ this.sharedItems = sharedItems;
26
+ }
27
+
28
+ // Helper function to escape XML special characters
29
+ escapeXml(unsafe) {
30
+ if (unsafe == null) return '';
31
+ return String(unsafe).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
32
+ }
33
+ render() {
34
+ // PivotCache Field: http://www.datypic.com/sc/ooxml/e-ssml_cacheField-1.html
35
+ // Shared Items: http://www.datypic.com/sc/ooxml/e-ssml_sharedItems-1.html
36
+
37
+ // integer types
38
+ if (this.sharedItems === null) {
39
+ // TK(2023-07-18): left out attributes... minValue="5" maxValue="45"
40
+ return `<cacheField name="${this.escapeXml(this.name)}" numFmtId="0">
41
+ <sharedItems containsSemiMixedTypes="0" containsString="0" containsNumber="1" containsInteger="1" />
42
+ </cacheField>`;
43
+ }
44
+
45
+ // Check if all items are truly numeric (typeof === 'number')
46
+ // String values like "03" that look numeric must use <s> tags,
47
+ // otherwise Excel will reject the pivot table when containsString="0"
48
+ // but string values are present.
49
+ const allNumeric = this.sharedItems.every(item => typeof item === 'number');
50
+ if (allNumeric) {
51
+ // numeric types - use <n> tags
52
+ const numbers = this.sharedItems.map(item => Number(item));
53
+ const minValue = Math.min(...numbers);
54
+ const maxValue = Math.max(...numbers);
55
+ const containsInteger = numbers.every(n => Number.isInteger(n));
56
+ return `<cacheField name="${this.escapeXml(this.name)}" numFmtId="0">
57
+ <sharedItems containsSemiMixedTypes="0" containsString="0" containsNumber="1" containsInteger="${containsInteger ? '1' : '0'}" minValue="${minValue}" maxValue="${maxValue}" count="${this.sharedItems.length}">
58
+ ${this.sharedItems.map(item => `<n v="${item}" />`).join('')}
59
+ </sharedItems>
60
+ </cacheField>`;
61
+ }
62
+
63
+ // string types
64
+ return `<cacheField name="${this.escapeXml(this.name)}" numFmtId="0">
65
+ <sharedItems count="${this.sharedItems.length}">
66
+ ${this.sharedItems.map(item => `<s v="${this.escapeXml(item)}" />`).join('')}
67
+ </sharedItems>
68
+ </cacheField>`;
69
+ }
70
+ }
71
+ module.exports = CacheField;
72
+ //# sourceMappingURL=cache-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-field.js","names":["CacheField","constructor","_ref","name","sharedItems","escapeXml","unsafe","String","replace","render","allNumeric","every","item","numbers","map","Number","minValue","Math","min","maxValue","max","containsInteger","n","isInteger","length","join","module","exports"],"sources":["../../../../../lib/xlsx/xform/pivot-table/cache-field.js"],"sourcesContent":["class CacheField {\r\n constructor({name, sharedItems}) {\r\n // string type\r\n //\r\n // {\r\n // 'name': 'A',\r\n // 'sharedItems': ['a1', 'a2', 'a3']\r\n // }\r\n //\r\n // or\r\n //\r\n // integer type\r\n //\r\n // {\r\n // 'name': 'D',\r\n // 'sharedItems': null\r\n // }\r\n this.name = name;\r\n this.sharedItems = sharedItems;\r\n }\r\n\r\n // Helper function to escape XML special characters\r\n escapeXml(unsafe) {\r\n if (unsafe == null) return '';\r\n return String(unsafe)\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&apos;');\r\n }\r\n\r\n render() {\r\n // PivotCache Field: http://www.datypic.com/sc/ooxml/e-ssml_cacheField-1.html\r\n // Shared Items: http://www.datypic.com/sc/ooxml/e-ssml_sharedItems-1.html\r\n\r\n // integer types\r\n if (this.sharedItems === null) {\r\n // TK(2023-07-18): left out attributes... minValue=\"5\" maxValue=\"45\"\r\n return `<cacheField name=\"${this.escapeXml(this.name)}\" numFmtId=\"0\">\r\n <sharedItems containsSemiMixedTypes=\"0\" containsString=\"0\" containsNumber=\"1\" containsInteger=\"1\" />\r\n </cacheField>`;\r\n }\r\n\r\n // Check if all items are truly numeric (typeof === 'number')\r\n // String values like \"03\" that look numeric must use <s> tags,\r\n // otherwise Excel will reject the pivot table when containsString=\"0\"\r\n // but string values are present.\r\n const allNumeric = this.sharedItems.every(item => typeof item === 'number');\r\n\r\n if (allNumeric) {\r\n // numeric types - use <n> tags\r\n const numbers = this.sharedItems.map(item => Number(item));\r\n const minValue = Math.min(...numbers);\r\n const maxValue = Math.max(...numbers);\r\n const containsInteger = numbers.every(n => Number.isInteger(n));\r\n\r\n return `<cacheField name=\"${this.escapeXml(this.name)}\" numFmtId=\"0\">\r\n <sharedItems containsSemiMixedTypes=\"0\" containsString=\"0\" containsNumber=\"1\" containsInteger=\"${containsInteger ? '1' : '0'}\" minValue=\"${minValue}\" maxValue=\"${maxValue}\" count=\"${this.sharedItems.length}\">\r\n ${this.sharedItems.map(item => `<n v=\"${item}\" />`).join('')}\r\n </sharedItems>\r\n </cacheField>`;\r\n }\r\n\r\n // string types\r\n return `<cacheField name=\"${this.escapeXml(this.name)}\" numFmtId=\"0\">\r\n <sharedItems count=\"${this.sharedItems.length}\">\r\n ${this.sharedItems.map(item => `<s v=\"${this.escapeXml(item)}\" />`).join('')}\r\n </sharedItems>\r\n </cacheField>`;\r\n }\r\n}\r\n\r\nmodule.exports = CacheField;\r\n"],"mappings":";;AAAA,MAAMA,UAAU,CAAC;EACfC,WAAWA,CAAAC,IAAA,EAAsB;IAAA,IAArB;MAACC,IAAI;MAAEC;IAAW,CAAC,GAAAF,IAAA;IAC7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,WAAW,GAAGA,WAAW;EAChC;;EAEA;EACAC,SAASA,CAACC,MAAM,EAAE;IAChB,IAAIA,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE;IAC7B,OAAOC,MAAM,CAACD,MAAM,CAAC,CAClBE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CACtBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CACvBA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;EAC5B;EAEAC,MAAMA,CAAA,EAAG;IACP;IACA;;IAEA;IACA,IAAI,IAAI,CAACL,WAAW,KAAK,IAAI,EAAE;MAC7B;MACA,OAAO,qBAAqB,IAAI,CAACC,SAAS,CAAC,IAAI,CAACF,IAAI,CAAC;AAC3D;AACA,kBAAkB;IACd;;IAEA;IACA;IACA;IACA;IACA,MAAMO,UAAU,GAAG,IAAI,CAACN,WAAW,CAACO,KAAK,CAACC,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,CAAC;IAE3E,IAAIF,UAAU,EAAE;MACd;MACA,MAAMG,OAAO,GAAG,IAAI,CAACT,WAAW,CAACU,GAAG,CAACF,IAAI,IAAIG,MAAM,CAACH,IAAI,CAAC,CAAC;MAC1D,MAAMI,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGL,OAAO,CAAC;MACrC,MAAMM,QAAQ,GAAGF,IAAI,CAACG,GAAG,CAAC,GAAGP,OAAO,CAAC;MACrC,MAAMQ,eAAe,GAAGR,OAAO,CAACF,KAAK,CAACW,CAAC,IAAIP,MAAM,CAACQ,SAAS,CAACD,CAAC,CAAC,CAAC;MAE/D,OAAO,qBAAqB,IAAI,CAACjB,SAAS,CAAC,IAAI,CAACF,IAAI,CAAC;AAC3D,uGAAuGkB,eAAe,GAAG,GAAG,GAAG,GAAG,eAAeL,QAAQ,eAAeG,QAAQ,YAAY,IAAI,CAACf,WAAW,CAACoB,MAAM;AACnN,UAAU,IAAI,CAACpB,WAAW,CAACU,GAAG,CAACF,IAAI,IAAI,SAASA,IAAI,MAAM,CAAC,CAACa,IAAI,CAAC,EAAE,CAAC;AACpE;AACA,kBAAkB;IACd;;IAEA;IACA,OAAO,qBAAqB,IAAI,CAACpB,SAAS,CAAC,IAAI,CAACF,IAAI,CAAC;AACzD,4BAA4B,IAAI,CAACC,WAAW,CAACoB,MAAM;AACnD,UAAU,IAAI,CAACpB,WAAW,CAACU,GAAG,CAACF,IAAI,IAAI,SAAS,IAAI,CAACP,SAAS,CAACO,IAAI,CAAC,MAAM,CAAC,CAACa,IAAI,CAAC,EAAE,CAAC;AACpF;AACA,kBAAkB;EAChB;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG3B,UAAU","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ const BaseXform = require('../base-xform');
4
+ const CacheField = require('./cache-field');
5
+ const XmlStream = require('../../../utils/xml-stream');
6
+ class PivotCacheDefinitionXform extends BaseXform {
7
+ constructor() {
8
+ super();
9
+ this.map = {};
10
+ }
11
+ prepare(model) {
12
+ // TK
13
+ }
14
+ get tag() {
15
+ // http://www.datypic.com/sc/ooxml/e-ssml_pivotCacheDefinition.html
16
+ return 'pivotCacheDefinition';
17
+ }
18
+ render(xmlStream, model) {
19
+ const {
20
+ sourceSheet,
21
+ cacheFields,
22
+ sourceDataRange
23
+ } = model;
24
+ xmlStream.openXml(XmlStream.StdDocAttributes);
25
+ xmlStream.openNode(this.tag, {
26
+ ...PivotCacheDefinitionXform.PIVOT_CACHE_DEFINITION_ATTRIBUTES,
27
+ 'r:id': 'rId1',
28
+ refreshOnLoad: '1',
29
+ // important for our implementation to work
30
+ refreshedBy: 'Author',
31
+ refreshedDate: '45125.026046874998',
32
+ createdVersion: '8',
33
+ refreshedVersion: '8',
34
+ minRefreshableVersion: '3',
35
+ recordCount: cacheFields.length + 1
36
+ });
37
+ xmlStream.openNode('cacheSource', {
38
+ type: 'worksheet'
39
+ });
40
+ xmlStream.leafNode('worksheetSource', {
41
+ ref: sourceDataRange || sourceSheet.dimensions.shortRange,
42
+ sheet: sourceSheet.name
43
+ });
44
+ xmlStream.closeNode();
45
+ xmlStream.openNode('cacheFields', {
46
+ count: cacheFields.length
47
+ });
48
+ // Note: keeping this pretty-printed for now to ease debugging.
49
+ xmlStream.writeXml(cacheFields.map(cacheField => new CacheField(cacheField).render()).join('\n '));
50
+ xmlStream.closeNode();
51
+ xmlStream.closeNode();
52
+ }
53
+ parseOpen(node) {
54
+ // TK
55
+ }
56
+ parseText(text) {
57
+ // TK
58
+ }
59
+ parseClose(name) {
60
+ // TK
61
+ }
62
+ reconcile(model, options) {
63
+ // TK
64
+ }
65
+ }
66
+ PivotCacheDefinitionXform.PIVOT_CACHE_DEFINITION_ATTRIBUTES = {
67
+ xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
68
+ 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
69
+ 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
70
+ 'mc:Ignorable': 'xr',
71
+ 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision'
72
+ };
73
+ module.exports = PivotCacheDefinitionXform;
74
+ //# sourceMappingURL=pivot-cache-definition-xform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot-cache-definition-xform.js","names":["BaseXform","require","CacheField","XmlStream","PivotCacheDefinitionXform","constructor","map","prepare","model","tag","render","xmlStream","sourceSheet","cacheFields","sourceDataRange","openXml","StdDocAttributes","openNode","PIVOT_CACHE_DEFINITION_ATTRIBUTES","refreshOnLoad","refreshedBy","refreshedDate","createdVersion","refreshedVersion","minRefreshableVersion","recordCount","length","type","leafNode","ref","dimensions","shortRange","sheet","name","closeNode","count","writeXml","cacheField","join","parseOpen","node","parseText","text","parseClose","reconcile","options","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\r\nconst CacheField = require('./cache-field');\r\nconst XmlStream = require('../../../utils/xml-stream');\r\n\r\nclass PivotCacheDefinitionXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {};\r\n }\r\n\r\n prepare(model) {\r\n // TK\r\n }\r\n\r\n get tag() {\r\n // http://www.datypic.com/sc/ooxml/e-ssml_pivotCacheDefinition.html\r\n return 'pivotCacheDefinition';\r\n }\r\n\r\n render(xmlStream, model) {\r\n const {sourceSheet, cacheFields, sourceDataRange} = model;\r\n\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode(this.tag, {\r\n ...PivotCacheDefinitionXform.PIVOT_CACHE_DEFINITION_ATTRIBUTES,\r\n 'r:id': 'rId1',\r\n refreshOnLoad: '1', // important for our implementation to work\r\n refreshedBy: 'Author',\r\n refreshedDate: '45125.026046874998',\r\n createdVersion: '8',\r\n refreshedVersion: '8',\r\n minRefreshableVersion: '3',\r\n recordCount: cacheFields.length + 1,\r\n });\r\n\r\n xmlStream.openNode('cacheSource', {type: 'worksheet'});\r\n xmlStream.leafNode('worksheetSource', {\r\n ref: sourceDataRange || sourceSheet.dimensions.shortRange,\r\n sheet: sourceSheet.name,\r\n });\r\n xmlStream.closeNode();\r\n\r\n xmlStream.openNode('cacheFields', {count: cacheFields.length});\r\n // Note: keeping this pretty-printed for now to ease debugging.\r\n xmlStream.writeXml(cacheFields.map(cacheField => new CacheField(cacheField).render()).join('\\n '));\r\n xmlStream.closeNode();\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n // TK\r\n }\r\n\r\n parseText(text) {\r\n // TK\r\n }\r\n\r\n parseClose(name) {\r\n // TK\r\n }\r\n\r\n reconcile(model, options) {\r\n // TK\r\n }\r\n}\r\n\r\nPivotCacheDefinitionXform.PIVOT_CACHE_DEFINITION_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'xr',\r\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\r\n};\r\n\r\nmodule.exports = PivotCacheDefinitionXform;\r\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,UAAU,GAAGD,OAAO,CAAC,eAAe,CAAC;AAC3C,MAAME,SAAS,GAAGF,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAMG,yBAAyB,SAASJ,SAAS,CAAC;EAChDK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG,CAAC,CAAC;EACf;EAEAC,OAAOA,CAACC,KAAK,EAAE;IACb;EAAA;EAGF,IAAIC,GAAGA,CAAA,EAAG;IACR;IACA,OAAO,sBAAsB;EAC/B;EAEAC,MAAMA,CAACC,SAAS,EAAEH,KAAK,EAAE;IACvB,MAAM;MAACI,WAAW;MAAEC,WAAW;MAAEC;IAAe,CAAC,GAAGN,KAAK;IAEzDG,SAAS,CAACI,OAAO,CAACZ,SAAS,CAACa,gBAAgB,CAAC;IAC7CL,SAAS,CAACM,QAAQ,CAAC,IAAI,CAACR,GAAG,EAAE;MAC3B,GAAGL,yBAAyB,CAACc,iCAAiC;MAC9D,MAAM,EAAE,MAAM;MACdC,aAAa,EAAE,GAAG;MAAE;MACpBC,WAAW,EAAE,QAAQ;MACrBC,aAAa,EAAE,oBAAoB;MACnCC,cAAc,EAAE,GAAG;MACnBC,gBAAgB,EAAE,GAAG;MACrBC,qBAAqB,EAAE,GAAG;MAC1BC,WAAW,EAAEZ,WAAW,CAACa,MAAM,GAAG;IACpC,CAAC,CAAC;IAEFf,SAAS,CAACM,QAAQ,CAAC,aAAa,EAAE;MAACU,IAAI,EAAE;IAAW,CAAC,CAAC;IACtDhB,SAAS,CAACiB,QAAQ,CAAC,iBAAiB,EAAE;MACpCC,GAAG,EAAEf,eAAe,IAAIF,WAAW,CAACkB,UAAU,CAACC,UAAU;MACzDC,KAAK,EAAEpB,WAAW,CAACqB;IACrB,CAAC,CAAC;IACFtB,SAAS,CAACuB,SAAS,CAAC,CAAC;IAErBvB,SAAS,CAACM,QAAQ,CAAC,aAAa,EAAE;MAACkB,KAAK,EAAEtB,WAAW,CAACa;IAAM,CAAC,CAAC;IAC9D;IACAf,SAAS,CAACyB,QAAQ,CAACvB,WAAW,CAACP,GAAG,CAAC+B,UAAU,IAAI,IAAInC,UAAU,CAACmC,UAAU,CAAC,CAAC3B,MAAM,CAAC,CAAC,CAAC,CAAC4B,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrG3B,SAAS,CAACuB,SAAS,CAAC,CAAC;IAErBvB,SAAS,CAACuB,SAAS,CAAC,CAAC;EACvB;EAEAK,SAASA,CAACC,IAAI,EAAE;IACd;EAAA;EAGFC,SAASA,CAACC,IAAI,EAAE;IACd;EAAA;EAGFC,UAAUA,CAACV,IAAI,EAAE;IACf;EAAA;EAGFW,SAASA,CAACpC,KAAK,EAAEqC,OAAO,EAAE;IACxB;EAAA;AAEJ;AAEAzC,yBAAyB,CAACc,iCAAiC,GAAG;EAC5D4B,KAAK,EAAE,2DAA2D;EAClE,SAAS,EAAE,qEAAqE;EAChF,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,IAAI;EACpB,UAAU,EAAE;AACd,CAAC;AAEDC,MAAM,CAACC,OAAO,GAAG5C,yBAAyB","ignoreList":[]}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ const XmlStream = require('../../../utils/xml-stream');
4
+ const BaseXform = require('../base-xform');
5
+ class PivotCacheRecordsXform extends BaseXform {
6
+ constructor() {
7
+ super();
8
+ this.map = {};
9
+ }
10
+ prepare(model) {
11
+ // TK
12
+ }
13
+ get tag() {
14
+ // http://www.datypic.com/sc/ooxml/e-ssml_pivotCacheRecords.html
15
+ return 'pivotCacheRecords';
16
+ }
17
+ render(xmlStream, model) {
18
+ const {
19
+ sourceSheet,
20
+ cacheFields,
21
+ dataStartRow = 2
22
+ } = model;
23
+ const sourceBodyRows = sourceSheet.getSheetValues().slice(dataStartRow);
24
+
25
+ // Pre-build lookup maps for sharedItems to avoid O(n) findIndex on every cell
26
+ const sharedItemsMaps = cacheFields.map(cf => {
27
+ if (cf.sharedItems === null) return null;
28
+ const map = new Map();
29
+ for (let i = 0; i < cf.sharedItems.length; i++) {
30
+ const item = cf.sharedItems[i];
31
+ const key = typeof item === 'string' ? item.toLowerCase() : item;
32
+ if (!map.has(key)) {
33
+ map.set(key, i);
34
+ }
35
+ }
36
+ return map;
37
+ });
38
+ xmlStream.openXml(XmlStream.StdDocAttributes);
39
+ xmlStream.openNode(this.tag, {
40
+ ...PivotCacheRecordsXform.PIVOT_CACHE_RECORDS_ATTRIBUTES,
41
+ count: sourceBodyRows.length
42
+ });
43
+ xmlStream.writeXml(renderTable());
44
+ xmlStream.closeNode();
45
+
46
+ // Helpers
47
+
48
+ function renderTable() {
49
+ const parts = [];
50
+ for (let rowIdx = 0; rowIdx < sourceBodyRows.length; rowIdx++) {
51
+ const row = sourceBodyRows[rowIdx];
52
+ if (!row) continue;
53
+ parts.push('\n <r>');
54
+ for (let colIdx = 1; colIdx < row.length; colIdx++) {
55
+ const cellValue = row[colIdx];
56
+ const sharedItemsMap = sharedItemsMaps[colIdx - 1];
57
+ if (cellValue === null || cellValue === undefined) {
58
+ parts.push('\n <m />');
59
+ } else if (sharedItemsMap === null) {
60
+ if (Number.isFinite(cellValue)) {
61
+ parts.push(`\n <n v="${cellValue}" />`);
62
+ } else {
63
+ parts.push(`\n <s v="${cellValue}" />`);
64
+ }
65
+ } else {
66
+ const key = typeof cellValue === 'string' ? cellValue.toLowerCase() : cellValue;
67
+ const sharedItemsIndex = sharedItemsMap.get(key);
68
+ if (sharedItemsIndex === undefined) {
69
+ throw new Error(`${JSON.stringify(cellValue)} not in sharedItems`);
70
+ }
71
+ parts.push(`\n <x v="${sharedItemsIndex}" />`);
72
+ }
73
+ }
74
+ parts.push('\n </r>');
75
+ }
76
+ return parts.join('');
77
+ }
78
+ }
79
+ parseOpen(node) {
80
+ // TK
81
+ }
82
+ parseText(text) {
83
+ // TK
84
+ }
85
+ parseClose(name) {
86
+ // TK
87
+ }
88
+ reconcile(model, options) {
89
+ // TK
90
+ }
91
+ }
92
+ PivotCacheRecordsXform.PIVOT_CACHE_RECORDS_ATTRIBUTES = {
93
+ xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
94
+ 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
95
+ 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
96
+ 'mc:Ignorable': 'xr',
97
+ 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision'
98
+ };
99
+ module.exports = PivotCacheRecordsXform;
100
+ //# sourceMappingURL=pivot-cache-records-xform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot-cache-records-xform.js","names":["XmlStream","require","BaseXform","PivotCacheRecordsXform","constructor","map","prepare","model","tag","render","xmlStream","sourceSheet","cacheFields","dataStartRow","sourceBodyRows","getSheetValues","slice","sharedItemsMaps","cf","sharedItems","Map","i","length","item","key","toLowerCase","has","set","openXml","StdDocAttributes","openNode","PIVOT_CACHE_RECORDS_ATTRIBUTES","count","writeXml","renderTable","closeNode","parts","rowIdx","row","push","colIdx","cellValue","sharedItemsMap","undefined","Number","isFinite","sharedItemsIndex","get","Error","JSON","stringify","join","parseOpen","node","parseText","text","parseClose","name","reconcile","options","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\nclass PivotCacheRecordsXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {};\r\n }\r\n\r\n prepare(model) {\r\n // TK\r\n }\r\n\r\n get tag() {\r\n // http://www.datypic.com/sc/ooxml/e-ssml_pivotCacheRecords.html\r\n return 'pivotCacheRecords';\r\n }\r\n\r\n render(xmlStream, model) {\r\n const {sourceSheet, cacheFields, dataStartRow = 2} = model;\r\n const sourceBodyRows = sourceSheet.getSheetValues().slice(dataStartRow);\r\n\r\n // Pre-build lookup maps for sharedItems to avoid O(n) findIndex on every cell\r\n const sharedItemsMaps = cacheFields.map(cf => {\r\n if (cf.sharedItems === null) return null;\r\n const map = new Map();\r\n for (let i = 0; i < cf.sharedItems.length; i++) {\r\n const item = cf.sharedItems[i];\r\n const key = typeof item === 'string' ? item.toLowerCase() : item;\r\n if (!map.has(key)) {\r\n map.set(key, i);\r\n }\r\n }\r\n return map;\r\n });\r\n\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode(this.tag, {\r\n ...PivotCacheRecordsXform.PIVOT_CACHE_RECORDS_ATTRIBUTES,\r\n count: sourceBodyRows.length,\r\n });\r\n xmlStream.writeXml(renderTable());\r\n xmlStream.closeNode();\r\n\r\n // Helpers\r\n\r\n function renderTable() {\r\n const parts = [];\r\n for (let rowIdx = 0; rowIdx < sourceBodyRows.length; rowIdx++) {\r\n const row = sourceBodyRows[rowIdx];\r\n if (!row) continue;\r\n parts.push('\\n <r>');\r\n for (let colIdx = 1; colIdx < row.length; colIdx++) {\r\n const cellValue = row[colIdx];\r\n const sharedItemsMap = sharedItemsMaps[colIdx - 1];\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n parts.push('\\n <m />');\r\n } else if (sharedItemsMap === null) {\r\n if (Number.isFinite(cellValue)) {\r\n parts.push(`\\n <n v=\"${cellValue}\" />`);\r\n } else {\r\n parts.push(`\\n <s v=\"${cellValue}\" />`);\r\n }\r\n } else {\r\n const key = typeof cellValue === 'string' ? cellValue.toLowerCase() : cellValue;\r\n const sharedItemsIndex = sharedItemsMap.get(key);\r\n if (sharedItemsIndex === undefined) {\r\n throw new Error(`${JSON.stringify(cellValue)} not in sharedItems`);\r\n }\r\n parts.push(`\\n <x v=\"${sharedItemsIndex}\" />`);\r\n }\r\n }\r\n parts.push('\\n </r>');\r\n }\r\n return parts.join('');\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n // TK\r\n }\r\n\r\n parseText(text) {\r\n // TK\r\n }\r\n\r\n parseClose(name) {\r\n // TK\r\n }\r\n\r\n reconcile(model, options) {\r\n // TK\r\n }\r\n}\r\n\r\nPivotCacheRecordsXform.PIVOT_CACHE_RECORDS_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'xr',\r\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\r\n};\r\n\r\nmodule.exports = PivotCacheRecordsXform;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+
3
+ const {
4
+ v4: uuidv4
5
+ } = require('uuid');
6
+ const colCache = require('../../../utils/col-cache');
7
+ const XmlStream = require('../../../utils/xml-stream');
8
+ const BaseXform = require('../base-xform');
9
+ class PivotTableXform extends BaseXform {
10
+ constructor() {
11
+ super();
12
+ this.map = {};
13
+ }
14
+ prepare(model) {
15
+ // TK
16
+ }
17
+ get tag() {
18
+ // http://www.datypic.com/sc/ooxml/e-ssml_pivotTableDefinition.html
19
+ return 'pivotTableDefinition';
20
+ }
21
+ render(xmlStream, model) {
22
+ // eslint-disable-next-line no-unused-vars
23
+ const {
24
+ rows,
25
+ columns,
26
+ values,
27
+ pages = [],
28
+ pageDefaults = {},
29
+ metric,
30
+ cacheFields,
31
+ cacheId,
32
+ applyWidthHeightFormats,
33
+ startCell = 'A1',
34
+ valueNumFmt = null
35
+ } = model;
36
+
37
+ // Examples
38
+ // --------
39
+ // rows: [0, 1], // only 2 items possible for now
40
+ // columns: [2], // only 1 item possible for now
41
+ // values: [4], // only 1 item possible for now
42
+ // pages: [5], // optional page fields
43
+ // pageDefaults: {5: 1}, // optional default selections (fieldIndex: itemIndex)
44
+ // metric: 'sum', // only 'sum' possible for now
45
+ //
46
+ // the numbers are indices into `cacheFields`.
47
+
48
+ // Generate unique UID for each pivot table
49
+ const uniqueUid = `{${uuidv4()}}`.toUpperCase();
50
+ xmlStream.openXml(XmlStream.StdDocAttributes);
51
+ xmlStream.openNode(this.tag, {
52
+ ...PivotTableXform.PIVOT_TABLE_ATTRIBUTES,
53
+ 'xr:uid': uniqueUid,
54
+ name: 'PivotTable2',
55
+ cacheId,
56
+ applyNumberFormats: '0',
57
+ applyBorderFormats: '0',
58
+ applyFontFormats: '0',
59
+ applyPatternFormats: '0',
60
+ applyAlignmentFormats: '0',
61
+ applyWidthHeightFormats,
62
+ dataCaption: 'Values',
63
+ updatedVersion: '8',
64
+ minRefreshableVersion: '3',
65
+ useAutoFormatting: '1',
66
+ itemPrintTitles: '1',
67
+ createdVersion: '8',
68
+ indent: '0',
69
+ compact: '0',
70
+ compactData: '0',
71
+ multipleFieldFilters: '0'
72
+ });
73
+
74
+ // Note: keeping this pretty-printed and verbose for now to ease debugging.
75
+ //
76
+ // location: ref="A3:E15"
77
+ // pivotFields
78
+ // rowFields and rowItems
79
+ // colFields and colItems
80
+ // pageFields (if any)
81
+ // dataFields
82
+ // pivotTableStyleInfo
83
+ // Build location ref from startCell
84
+ // Default startCell is A1. The ref range will be expanded by Excel on refresh.
85
+ const startAddr = colCache.decodeAddress(startCell);
86
+ // Estimate end cell - Excel will recalculate on refresh with refreshOnLoad
87
+ const endCol = colCache.n2l(startAddr.col + columns.length + rows.length + values.length);
88
+ const endRow = startAddr.row + 10; // placeholder row count, Excel recalculates
89
+ const locationRef = `${startCell}:${endCol}${endRow}`;
90
+ const locationAttrs = pages.length > 0 ? `ref="${locationRef}" firstHeaderRow="1" firstDataRow="3" firstDataCol="1" rowPageCount="1" colPageCount="1"` : `ref="${locationRef}" firstHeaderRow="1" firstDataRow="2" firstDataCol="1"`;
91
+ xmlStream.writeXml(`
92
+ <location ${locationAttrs} />
93
+ <pivotFields count="${cacheFields.length}">
94
+ ${renderPivotFields(model)}
95
+ </pivotFields>
96
+ <rowFields count="${rows.length}">
97
+ ${rows.map(rowIndex => `<field x="${rowIndex}" />`).join('\n ')}
98
+ </rowFields>
99
+ <rowItems count="1">
100
+ <i t="grand"><x /></i>
101
+ </rowItems>
102
+ <colFields count="${columns.length}">
103
+ ${columns.map(columnIndex => `<field x="${columnIndex}" />`).join('\n ')}
104
+ </colFields>
105
+ <colItems count="1">
106
+ <i t="grand"><x /></i>
107
+ </colItems>
108
+ ${pages.length > 0 ? `<pageFields count="${pages.length}">
109
+ ${pages.map(pageIndex => `<pageField fld="${pageIndex}" hier="-1" />`).join('\n ')}
110
+ </pageFields>` : ''}
111
+ <dataFields count="${values.length}">
112
+ <dataField
113
+ name="${metric === 'count' ? 'Count' : 'Sum'} of ${cacheFields[values[0]].name}"
114
+ fld="${values[0]}"
115
+ baseField="0"
116
+ baseItem="0"
117
+ ${metric === 'count' ? 'subtotal="count"' : ''}
118
+ ${valueNumFmt ? `numFmtId="${valueNumFmt}"` : ''}
119
+ />
120
+ </dataFields>
121
+ <pivotTableStyleInfo
122
+ name="PivotStyleLight16"
123
+ showRowHeaders="1"
124
+ showColHeaders="1"
125
+ showRowStripes="0"
126
+ showColStripes="0"
127
+ showLastColumn="1"
128
+ />
129
+ <extLst>
130
+ <ext
131
+ uri="{962EF5D1-5CA2-4c93-8EF4-DBF5C05439D2}"
132
+ xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"
133
+ >
134
+ <x14:pivotTableDefinition
135
+ hideValuesRow="1"
136
+ xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main"
137
+ />
138
+ </ext>
139
+ <ext
140
+ uri="{747A6164-185A-40DC-8AA5-F01512510D54}"
141
+ xmlns:xpdl="http://schemas.microsoft.com/office/spreadsheetml/2016/pivotdefaultlayout"
142
+ >
143
+ <xpdl:pivotTableDefinition16
144
+ EnabledSubtotalsDefault="0"
145
+ SubtotalsOnTopDefault="0"
146
+ />
147
+ </ext>
148
+ </extLst>
149
+ `);
150
+ xmlStream.closeNode();
151
+ }
152
+ parseOpen(node) {
153
+ // TK
154
+ }
155
+ parseText(text) {
156
+ // TK
157
+ }
158
+ parseClose(name) {
159
+ // TK
160
+ }
161
+ reconcile(model, options) {
162
+ // TK
163
+ }
164
+ }
165
+
166
+ // Helpers
167
+
168
+ function renderPivotFields(pivotTable) {
169
+ /* eslint-disable no-nested-ternary */
170
+ const pages = pivotTable.pages || [];
171
+ const pageDefaults = pivotTable.pageDefaults || {};
172
+ return pivotTable.cacheFields.map((cacheField, fieldIndex) => {
173
+ const fieldType = pivotTable.rows.indexOf(fieldIndex) >= 0 ? 'row' : pivotTable.columns.indexOf(fieldIndex) >= 0 ? 'column' : pages.indexOf(fieldIndex) >= 0 ? 'page' : pivotTable.values.indexOf(fieldIndex) >= 0 ? 'value' : null;
174
+ const defaultItemIndex = fieldType === 'page' ? pageDefaults[fieldIndex] : undefined;
175
+ return renderPivotField(fieldType, cacheField.sharedItems, defaultItemIndex);
176
+ }).join('');
177
+ }
178
+ function renderPivotField(fieldType, sharedItems, defaultItemIndex) {
179
+ // fieldType: 'row', 'column', 'page', 'value', null
180
+
181
+ const defaultAttributes = 'compact="0" outline="0" showAll="0" defaultSubtotal="0"';
182
+ if (fieldType === 'row' || fieldType === 'column') {
183
+ const axis = fieldType === 'row' ? 'axisRow' : 'axisCol';
184
+ return `
185
+ <pivotField axis="${axis}" ${defaultAttributes}>
186
+ <items count="${sharedItems.length + 1}">
187
+ ${sharedItems.map((item, index) => `<item x="${index}" />`).join('\n ')}
188
+ </items>
189
+ </pivotField>
190
+ `;
191
+ }
192
+ if (fieldType === 'page') {
193
+ // Page fields use axis="axisPage" and items with hidden flags
194
+ if (defaultItemIndex !== undefined && sharedItems) {
195
+ return `
196
+ <pivotField axis="axisPage" compact="0" outline="0" subtotalTop="0" multipleItemSelectionAllowed="1" showAll="0" defaultSubtotal="0">
197
+ <items count="${sharedItems.length}">
198
+ ${sharedItems.map((item, index) => {
199
+ const hidden = index !== defaultItemIndex ? ' h="1"' : '';
200
+ return `<item${hidden} x="${index}" />`;
201
+ }).join('\n ')}
202
+ </items>
203
+ </pivotField>
204
+ `;
205
+ }
206
+ // Page field without default selection
207
+ return `
208
+ <pivotField axis="axisPage" ${defaultAttributes}>
209
+ <items count="${sharedItems ? sharedItems.length : 1}">
210
+ ${sharedItems ? sharedItems.map((item, index) => `<item x="${index}" />`).join('\n ') : ''}
211
+ </items>
212
+ </pivotField>
213
+ `;
214
+ }
215
+ return `
216
+ <pivotField
217
+ ${fieldType === 'value' ? 'dataField="1"' : ''}
218
+ ${defaultAttributes}
219
+ />
220
+ `;
221
+ }
222
+ PivotTableXform.PIVOT_TABLE_ATTRIBUTES = {
223
+ xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
224
+ 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
225
+ 'mc:Ignorable': 'xr',
226
+ 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision'
227
+ };
228
+ module.exports = PivotTableXform;
229
+ //# sourceMappingURL=pivot-table-xform.js.map