@alienkarma/exceljs 4.4.0-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3024 -0
  3. package/README_zh.md +2878 -0
  4. package/dist/LICENSE +22 -0
  5. package/dist/es5/csv/csv.js +182 -0
  6. package/dist/es5/csv/csv.js.map +1 -0
  7. package/dist/es5/csv/line-buffer.js +68 -0
  8. package/dist/es5/csv/line-buffer.js.map +1 -0
  9. package/dist/es5/csv/stream-converter.js +110 -0
  10. package/dist/es5/csv/stream-converter.js.map +1 -0
  11. package/dist/es5/doc/anchor.js +73 -0
  12. package/dist/es5/doc/anchor.js.map +1 -0
  13. package/dist/es5/doc/cell.js +960 -0
  14. package/dist/es5/doc/cell.js.map +1 -0
  15. package/dist/es5/doc/column.js +274 -0
  16. package/dist/es5/doc/column.js.map +1 -0
  17. package/dist/es5/doc/data-validations.js +18 -0
  18. package/dist/es5/doc/data-validations.js.map +1 -0
  19. package/dist/es5/doc/defined-names.js +173 -0
  20. package/dist/es5/doc/defined-names.js.map +1 -0
  21. package/dist/es5/doc/enums.js +49 -0
  22. package/dist/es5/doc/enums.js.map +1 -0
  23. package/dist/es5/doc/image.js +69 -0
  24. package/dist/es5/doc/image.js.map +1 -0
  25. package/dist/es5/doc/modelcontainer.js +16 -0
  26. package/dist/es5/doc/modelcontainer.js.map +1 -0
  27. package/dist/es5/doc/note.js +64 -0
  28. package/dist/es5/doc/note.js.map +1 -0
  29. package/dist/es5/doc/pivot-table.js +137 -0
  30. package/dist/es5/doc/pivot-table.js.map +1 -0
  31. package/dist/es5/doc/range.js +229 -0
  32. package/dist/es5/doc/range.js.map +1 -0
  33. package/dist/es5/doc/row.js +382 -0
  34. package/dist/es5/doc/row.js.map +1 -0
  35. package/dist/es5/doc/table.js +441 -0
  36. package/dist/es5/doc/table.js.map +1 -0
  37. package/dist/es5/doc/workbook.js +205 -0
  38. package/dist/es5/doc/workbook.js.map +1 -0
  39. package/dist/es5/doc/worksheet.js +918 -0
  40. package/dist/es5/doc/worksheet.js.map +1 -0
  41. package/dist/es5/exceljs.bare.js +14 -0
  42. package/dist/es5/exceljs.bare.js.map +1 -0
  43. package/dist/es5/exceljs.browser.js +36 -0
  44. package/dist/es5/exceljs.browser.js.map +1 -0
  45. package/dist/es5/exceljs.nodejs.js +15 -0
  46. package/dist/es5/exceljs.nodejs.js.map +1 -0
  47. package/dist/es5/index.js +15 -0
  48. package/dist/es5/stream/xlsx/hyperlink-reader.js +90 -0
  49. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -0
  50. package/dist/es5/stream/xlsx/sheet-comments-writer.js +94 -0
  51. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -0
  52. package/dist/es5/stream/xlsx/sheet-rels-writer.js +94 -0
  53. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -0
  54. package/dist/es5/stream/xlsx/workbook-reader.js +362 -0
  55. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -0
  56. package/dist/es5/stream/xlsx/workbook-writer.js +347 -0
  57. package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -0
  58. package/dist/es5/stream/xlsx/worksheet-reader.js +392 -0
  59. package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -0
  60. package/dist/es5/stream/xlsx/worksheet-writer.js +652 -0
  61. package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -0
  62. package/dist/es5/utils/auto-drain.js +18 -0
  63. package/dist/es5/utils/auto-drain.js.map +1 -0
  64. package/dist/es5/utils/browser-buffer-decode.js +15 -0
  65. package/dist/es5/utils/browser-buffer-decode.js.map +1 -0
  66. package/dist/es5/utils/browser-buffer-encode.js +18 -0
  67. package/dist/es5/utils/browser-buffer-encode.js.map +1 -0
  68. package/dist/es5/utils/cell-matrix.js +149 -0
  69. package/dist/es5/utils/cell-matrix.js.map +1 -0
  70. package/dist/es5/utils/col-cache.js +258 -0
  71. package/dist/es5/utils/col-cache.js.map +1 -0
  72. package/dist/es5/utils/copy-style.js +43 -0
  73. package/dist/es5/utils/copy-style.js.map +1 -0
  74. package/dist/es5/utils/encryptor.js +58 -0
  75. package/dist/es5/utils/encryptor.js.map +1 -0
  76. package/dist/es5/utils/iterate-stream.js +46 -0
  77. package/dist/es5/utils/iterate-stream.js.map +1 -0
  78. package/dist/es5/utils/parse-sax.js +47 -0
  79. package/dist/es5/utils/parse-sax.js.map +1 -0
  80. package/dist/es5/utils/shared-formula.js +42 -0
  81. package/dist/es5/utils/shared-formula.js.map +1 -0
  82. package/dist/es5/utils/shared-strings.js +32 -0
  83. package/dist/es5/utils/shared-strings.js.map +1 -0
  84. package/dist/es5/utils/stream-base64.js +66 -0
  85. package/dist/es5/utils/stream-base64.js.map +1 -0
  86. package/dist/es5/utils/stream-buf.js +343 -0
  87. package/dist/es5/utils/stream-buf.js.map +1 -0
  88. package/dist/es5/utils/string-buf.js +73 -0
  89. package/dist/es5/utils/string-buf.js.map +1 -0
  90. package/dist/es5/utils/string-builder.js +32 -0
  91. package/dist/es5/utils/string-builder.js.map +1 -0
  92. package/dist/es5/utils/stuttered-pipe.js +61 -0
  93. package/dist/es5/utils/stuttered-pipe.js.map +1 -0
  94. package/dist/es5/utils/typed-stack.js +23 -0
  95. package/dist/es5/utils/typed-stack.js.map +1 -0
  96. package/dist/es5/utils/under-dash.js +168 -0
  97. package/dist/es5/utils/under-dash.js.map +1 -0
  98. package/dist/es5/utils/utils.js +204 -0
  99. package/dist/es5/utils/utils.js.map +1 -0
  100. package/dist/es5/utils/xml-stream.js +151 -0
  101. package/dist/es5/utils/xml-stream.js.map +1 -0
  102. package/dist/es5/utils/zip-stream.js +79 -0
  103. package/dist/es5/utils/zip-stream.js.map +1 -0
  104. package/dist/es5/xlsx/defaultnumformats.js +230 -0
  105. package/dist/es5/xlsx/defaultnumformats.js.map +1 -0
  106. package/dist/es5/xlsx/rel-type.js +21 -0
  107. package/dist/es5/xlsx/rel-type.js.map +1 -0
  108. package/dist/es5/xlsx/xform/base-xform.js +139 -0
  109. package/dist/es5/xlsx/xform/base-xform.js.map +1 -0
  110. package/dist/es5/xlsx/xform/book/defined-name-xform.js +85 -0
  111. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -0
  112. package/dist/es5/xlsx/xform/book/sheet-xform.js +32 -0
  113. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +1 -0
  114. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
  115. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +1 -0
  116. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
  117. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +1 -0
  118. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +27 -0
  119. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +1 -0
  120. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +51 -0
  121. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +1 -0
  122. package/dist/es5/xlsx/xform/book/workbook-xform.js +241 -0
  123. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -0
  124. package/dist/es5/xlsx/xform/comment/comment-xform.js +103 -0
  125. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -0
  126. package/dist/es5/xlsx/xform/comment/comments-xform.js +76 -0
  127. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +1 -0
  128. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +35 -0
  129. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +1 -0
  130. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +32 -0
  131. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +1 -0
  132. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +53 -0
  133. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +1 -0
  134. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +97 -0
  135. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +1 -0
  136. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +107 -0
  137. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
  138. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +92 -0
  139. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -0
  140. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +61 -0
  141. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -0
  142. package/dist/es5/xlsx/xform/composite-xform.js +51 -0
  143. package/dist/es5/xlsx/xform/composite-xform.js.map +1 -0
  144. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +30 -0
  145. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +1 -0
  146. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +27 -0
  147. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +1 -0
  148. package/dist/es5/xlsx/xform/core/app-xform.js +93 -0
  149. package/dist/es5/xlsx/xform/core/app-xform.js.map +1 -0
  150. package/dist/es5/xlsx/xform/core/content-types-xform.js +127 -0
  151. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
  152. package/dist/es5/xlsx/xform/core/core-xform.js +158 -0
  153. package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -0
  154. package/dist/es5/xlsx/xform/core/relationship-xform.js +23 -0
  155. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +1 -0
  156. package/dist/es5/xlsx/xform/core/relationships-xform.js +65 -0
  157. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -0
  158. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
  159. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +1 -0
  160. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +61 -0
  161. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +1 -0
  162. package/dist/es5/xlsx/xform/drawing/blip-xform.js +39 -0
  163. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +1 -0
  164. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
  165. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +1 -0
  166. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
  167. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -0
  168. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +82 -0
  169. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +1 -0
  170. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +98 -0
  171. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +1 -0
  172. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +40 -0
  173. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +1 -0
  174. package/dist/es5/xlsx/xform/drawing/ext-xform.js +38 -0
  175. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +1 -0
  176. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +38 -0
  177. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +1 -0
  178. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
  179. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +1 -0
  180. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  181. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +1 -0
  182. package/dist/es5/xlsx/xform/drawing/pic-xform.js +67 -0
  183. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +1 -0
  184. package/dist/es5/xlsx/xform/drawing/sp-pr.js +30 -0
  185. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +1 -0
  186. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  187. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +1 -0
  188. package/dist/es5/xlsx/xform/list-xform.js +91 -0
  189. package/dist/es5/xlsx/xform/list-xform.js.map +1 -0
  190. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +48 -0
  191. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -0
  192. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +73 -0
  193. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -0
  194. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +93 -0
  195. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -0
  196. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +176 -0
  197. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -0
  198. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +40 -0
  199. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -0
  200. package/dist/es5/xlsx/xform/sheet/cell-xform.js +450 -0
  201. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -0
  202. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +275 -0
  203. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -0
  204. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
  205. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +1 -0
  206. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
  207. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +1 -0
  208. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +45 -0
  209. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +1 -0
  210. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
  211. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -0
  212. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +42 -0
  213. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +1 -0
  214. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +71 -0
  215. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +1 -0
  216. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +22 -0
  217. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +1 -0
  218. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +43 -0
  219. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +1 -0
  220. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +28 -0
  221. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +1 -0
  222. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +88 -0
  223. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -0
  224. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
  225. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +1 -0
  226. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +52 -0
  227. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +1 -0
  228. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
  229. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +1 -0
  230. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +75 -0
  231. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +1 -0
  232. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
  233. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +1 -0
  234. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +66 -0
  235. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +1 -0
  236. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
  237. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +1 -0
  238. package/dist/es5/xlsx/xform/sheet/col-xform.js +78 -0
  239. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +1 -0
  240. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +247 -0
  241. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -0
  242. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +28 -0
  243. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +1 -0
  244. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +32 -0
  245. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +1 -0
  246. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +69 -0
  247. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +1 -0
  248. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +126 -0
  249. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +1 -0
  250. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +50 -0
  251. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +1 -0
  252. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +26 -0
  253. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +1 -0
  254. package/dist/es5/xlsx/xform/sheet/merges.js +52 -0
  255. package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -0
  256. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +35 -0
  257. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +1 -0
  258. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +24 -0
  259. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +1 -0
  260. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +46 -0
  261. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +1 -0
  262. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
  263. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +1 -0
  264. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +99 -0
  265. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +1 -0
  266. package/dist/es5/xlsx/xform/sheet/picture-xform.js +32 -0
  267. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +1 -0
  268. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +45 -0
  269. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +1 -0
  270. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +37 -0
  271. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +1 -0
  272. package/dist/es5/xlsx/xform/sheet/row-xform.js +128 -0
  273. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
  274. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +51 -0
  275. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +1 -0
  276. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +83 -0
  277. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +1 -0
  278. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +84 -0
  279. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +1 -0
  280. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +190 -0
  281. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +1 -0
  282. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +32 -0
  283. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +1 -0
  284. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +522 -0
  285. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -0
  286. package/dist/es5/xlsx/xform/simple/boolean-xform.js +27 -0
  287. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +1 -0
  288. package/dist/es5/xlsx/xform/simple/date-xform.js +58 -0
  289. package/dist/es5/xlsx/xform/simple/date-xform.js.map +1 -0
  290. package/dist/es5/xlsx/xform/simple/float-xform.js +47 -0
  291. package/dist/es5/xlsx/xform/simple/float-xform.js.map +1 -0
  292. package/dist/es5/xlsx/xform/simple/integer-xform.js +53 -0
  293. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +1 -0
  294. package/dist/es5/xlsx/xform/simple/string-xform.js +47 -0
  295. package/dist/es5/xlsx/xform/simple/string-xform.js.map +1 -0
  296. package/dist/es5/xlsx/xform/static-xform.js +61 -0
  297. package/dist/es5/xlsx/xform/static-xform.js.map +1 -0
  298. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  299. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +1 -0
  300. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +92 -0
  301. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +1 -0
  302. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +99 -0
  303. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +1 -0
  304. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +114 -0
  305. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -0
  306. package/dist/es5/xlsx/xform/strings/text-xform.js +39 -0
  307. package/dist/es5/xlsx/xform/strings/text-xform.js.map +1 -0
  308. package/dist/es5/xlsx/xform/style/alignment-xform.js +139 -0
  309. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +1 -0
  310. package/dist/es5/xlsx/xform/style/border-xform.js +185 -0
  311. package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -0
  312. package/dist/es5/xlsx/xform/style/color-xform.js +66 -0
  313. package/dist/es5/xlsx/xform/style/color-xform.js.map +1 -0
  314. package/dist/es5/xlsx/xform/style/dxf-xform.js +106 -0
  315. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +1 -0
  316. package/dist/es5/xlsx/xform/style/fill-xform.js +307 -0
  317. package/dist/es5/xlsx/xform/style/fill-xform.js.map +1 -0
  318. package/dist/es5/xlsx/xform/style/font-xform.js +175 -0
  319. package/dist/es5/xlsx/xform/style/font-xform.js.map +1 -0
  320. package/dist/es5/xlsx/xform/style/numfmt-xform.js +58 -0
  321. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +1 -0
  322. package/dist/es5/xlsx/xform/style/protection-xform.js +53 -0
  323. package/dist/es5/xlsx/xform/style/protection-xform.js.map +1 -0
  324. package/dist/es5/xlsx/xform/style/style-xform.js +118 -0
  325. package/dist/es5/xlsx/xform/style/style-xform.js.map +1 -0
  326. package/dist/es5/xlsx/xform/style/styles-xform.js +611 -0
  327. package/dist/es5/xlsx/xform/style/styles-xform.js.map +1 -0
  328. package/dist/es5/xlsx/xform/style/underline-xform.js +46 -0
  329. package/dist/es5/xlsx/xform/style/underline-xform.js.map +1 -0
  330. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +75 -0
  331. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -0
  332. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +30 -0
  333. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +1 -0
  334. package/dist/es5/xlsx/xform/table/filter-column-xform.js +89 -0
  335. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -0
  336. package/dist/es5/xlsx/xform/table/filter-xform.js +28 -0
  337. package/dist/es5/xlsx/xform/table/filter-xform.js.map +1 -0
  338. package/dist/es5/xlsx/xform/table/table-column-xform.js +42 -0
  339. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +1 -0
  340. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +40 -0
  341. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +1 -0
  342. package/dist/es5/xlsx/xform/table/table-xform.js +122 -0
  343. package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
  344. package/dist/es5/xlsx/xlsx.js +775 -0
  345. package/dist/es5/xlsx/xlsx.js.map +1 -0
  346. package/dist/es5/xlsx/xml/theme1.js +5 -0
  347. package/dist/es5/xlsx/xml/theme1.js.map +1 -0
  348. package/dist/exceljs.bare.js +57759 -0
  349. package/dist/exceljs.bare.js.map +777 -0
  350. package/dist/exceljs.bare.min.js +45 -0
  351. package/dist/exceljs.bare.min.js.map +1 -0
  352. package/dist/exceljs.js +62398 -0
  353. package/dist/exceljs.js.map +1095 -0
  354. package/dist/exceljs.min.js +45 -0
  355. package/dist/exceljs.min.js.map +1 -0
  356. package/excel.js +13 -0
  357. package/index.d.ts +2040 -0
  358. package/index.ts +2 -0
  359. package/lib/csv/csv.js +191 -0
  360. package/lib/csv/line-buffer.js +74 -0
  361. package/lib/csv/stream-converter.js +135 -0
  362. package/lib/doc/anchor.js +91 -0
  363. package/lib/doc/cell.js +1124 -0
  364. package/lib/doc/column.js +320 -0
  365. package/lib/doc/data/theme1.json +234 -0
  366. package/lib/doc/data-validations.js +19 -0
  367. package/lib/doc/defined-names.js +196 -0
  368. package/lib/doc/enums.js +48 -0
  369. package/lib/doc/image.js +59 -0
  370. package/lib/doc/modelcontainer.js +18 -0
  371. package/lib/doc/note.js +65 -0
  372. package/lib/doc/pivot-table.js +132 -0
  373. package/lib/doc/range.js +257 -0
  374. package/lib/doc/row.js +415 -0
  375. package/lib/doc/table.js +465 -0
  376. package/lib/doc/workbook.js +224 -0
  377. package/lib/doc/worksheet.js +949 -0
  378. package/lib/exceljs.bare.js +13 -0
  379. package/lib/exceljs.browser.js +36 -0
  380. package/lib/exceljs.nodejs.js +14 -0
  381. package/lib/stream/xlsx/hyperlink-reader.js +83 -0
  382. package/lib/stream/xlsx/sheet-comments-writer.js +121 -0
  383. package/lib/stream/xlsx/sheet-rels-writer.js +119 -0
  384. package/lib/stream/xlsx/workbook-reader.js +337 -0
  385. package/lib/stream/xlsx/workbook-writer.js +347 -0
  386. package/lib/stream/xlsx/worksheet-reader.js +374 -0
  387. package/lib/stream/xlsx/worksheet-writer.js +717 -0
  388. package/lib/utils/auto-drain.js +15 -0
  389. package/lib/utils/browser-buffer-decode.js +14 -0
  390. package/lib/utils/browser-buffer-encode.js +15 -0
  391. package/lib/utils/cell-matrix.js +165 -0
  392. package/lib/utils/col-cache.js +287 -0
  393. package/lib/utils/copy-style.js +43 -0
  394. package/lib/utils/encryptor.js +55 -0
  395. package/lib/utils/iterate-stream.js +48 -0
  396. package/lib/utils/parse-sax.js +30 -0
  397. package/lib/utils/shared-formula.js +44 -0
  398. package/lib/utils/shared-strings.js +35 -0
  399. package/lib/utils/stream-base64.js +72 -0
  400. package/lib/utils/stream-buf.js +364 -0
  401. package/lib/utils/string-buf.js +82 -0
  402. package/lib/utils/string-builder.js +35 -0
  403. package/lib/utils/stuttered-pipe.js +67 -0
  404. package/lib/utils/typed-stack.js +24 -0
  405. package/lib/utils/under-dash.js +184 -0
  406. package/lib/utils/utils.js +205 -0
  407. package/lib/utils/xml-stream.js +169 -0
  408. package/lib/utils/zip-stream.js +87 -0
  409. package/lib/xlsx/.rels +11 -0
  410. package/lib/xlsx/calcChain.xml +6 -0
  411. package/lib/xlsx/core.xml +7 -0
  412. package/lib/xlsx/defaultnumformats.js +153 -0
  413. package/lib/xlsx/rel-type.js +20 -0
  414. package/lib/xlsx/styles.xml +41 -0
  415. package/lib/xlsx/workbook.xml +16 -0
  416. package/lib/xlsx/xform/base-xform.js +145 -0
  417. package/lib/xlsx/xform/book/defined-name-xform.js +91 -0
  418. package/lib/xlsx/xform/book/sheet-xform.js +34 -0
  419. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -0
  420. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -0
  421. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -0
  422. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -0
  423. package/lib/xlsx/xform/book/workbook-xform.js +259 -0
  424. package/lib/xlsx/xform/comment/comment-xform.js +105 -0
  425. package/lib/xlsx/xform/comment/comments-xform.js +82 -0
  426. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -0
  427. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -0
  428. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -0
  429. package/lib/xlsx/xform/comment/vml-client-data-xform.js +95 -0
  430. package/lib/xlsx/xform/comment/vml-notes-xform.js +107 -0
  431. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -0
  432. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -0
  433. package/lib/xlsx/xform/composite-xform.js +56 -0
  434. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -0
  435. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -0
  436. package/lib/xlsx/xform/core/app-xform.js +100 -0
  437. package/lib/xlsx/xform/core/content-types-xform.js +135 -0
  438. package/lib/xlsx/xform/core/core-xform.js +136 -0
  439. package/lib/xlsx/xform/core/relationship-xform.js +25 -0
  440. package/lib/xlsx/xform/core/relationships-xform.js +73 -0
  441. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -0
  442. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -0
  443. package/lib/xlsx/xform/drawing/blip-xform.js +42 -0
  444. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -0
  445. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -0
  446. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -0
  447. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -0
  448. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -0
  449. package/lib/xlsx/xform/drawing/ext-xform.js +44 -0
  450. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -0
  451. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -0
  452. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
  453. package/lib/xlsx/xform/drawing/pic-xform.js +77 -0
  454. package/lib/xlsx/xform/drawing/sp-pr.js +17 -0
  455. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
  456. package/lib/xlsx/xform/list-xform.js +95 -0
  457. package/lib/xlsx/xform/pivot-table/cache-field.js +43 -0
  458. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -0
  459. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +103 -0
  460. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +189 -0
  461. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -0
  462. package/lib/xlsx/xform/sheet/cell-xform.js +498 -0
  463. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +301 -0
  464. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -0
  465. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -0
  466. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -0
  467. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -0
  468. package/lib/xlsx/xform/sheet/cf/databar-xform.js +49 -0
  469. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -0
  470. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -0
  471. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -0
  472. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -0
  473. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -0
  474. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -0
  475. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -0
  476. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -0
  477. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +98 -0
  478. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -0
  479. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -0
  480. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -0
  481. package/lib/xlsx/xform/sheet/col-xform.js +86 -0
  482. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -0
  483. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -0
  484. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -0
  485. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -0
  486. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -0
  487. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -0
  488. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -0
  489. package/lib/xlsx/xform/sheet/merges.js +56 -0
  490. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -0
  491. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -0
  492. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -0
  493. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -0
  494. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -0
  495. package/lib/xlsx/xform/sheet/picture-xform.js +33 -0
  496. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -0
  497. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -0
  498. package/lib/xlsx/xform/sheet/row-xform.js +142 -0
  499. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +55 -0
  500. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -0
  501. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -0
  502. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -0
  503. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -0
  504. package/lib/xlsx/xform/sheet/worksheet-xform.js +548 -0
  505. package/lib/xlsx/xform/simple/boolean-xform.js +31 -0
  506. package/lib/xlsx/xform/simple/date-xform.js +66 -0
  507. package/lib/xlsx/xform/simple/float-xform.js +51 -0
  508. package/lib/xlsx/xform/simple/integer-xform.js +57 -0
  509. package/lib/xlsx/xform/simple/string-xform.js +51 -0
  510. package/lib/xlsx/xform/static-xform.js +64 -0
  511. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -0
  512. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -0
  513. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -0
  514. package/lib/xlsx/xform/strings/shared-strings-xform.js +127 -0
  515. package/lib/xlsx/xform/strings/text-xform.js +44 -0
  516. package/lib/xlsx/xform/style/alignment-xform.js +172 -0
  517. package/lib/xlsx/xform/style/border-xform.js +207 -0
  518. package/lib/xlsx/xform/style/color-xform.js +63 -0
  519. package/lib/xlsx/xform/style/dxf-xform.js +111 -0
  520. package/lib/xlsx/xform/style/fill-xform.js +364 -0
  521. package/lib/xlsx/xform/style/font-xform.js +102 -0
  522. package/lib/xlsx/xform/style/numfmt-xform.js +63 -0
  523. package/lib/xlsx/xform/style/protection-xform.js +60 -0
  524. package/lib/xlsx/xform/style/style-xform.js +125 -0
  525. package/lib/xlsx/xform/style/styles-xform.js +527 -0
  526. package/lib/xlsx/xform/style/underline-xform.js +47 -0
  527. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -0
  528. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -0
  529. package/lib/xlsx/xform/table/filter-column-xform.js +96 -0
  530. package/lib/xlsx/xform/table/filter-xform.js +31 -0
  531. package/lib/xlsx/xform/table/table-column-xform.js +44 -0
  532. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -0
  533. package/lib/xlsx/xform/table/table-xform.js +131 -0
  534. package/lib/xlsx/xlsx.js +774 -0
  535. package/lib/xlsx/xml/theme1.js +3 -0
  536. package/lib/xlsx/xml/theme1.xml +318 -0
  537. package/package.json +149 -0
@@ -0,0 +1,1124 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ const colCache = require('../utils/col-cache');
3
+ const _ = require('../utils/under-dash');
4
+ const Enums = require('./enums');
5
+ const {slideFormula} = require('../utils/shared-formula');
6
+ const Note = require('./note');
7
+ // Cell requirements
8
+ // Operate inside a worksheet
9
+ // Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.
10
+ // Manage/use and manipulate cell format either as local to cell or inherited from column or row.
11
+
12
+ class Cell {
13
+ constructor(row, column, address) {
14
+ if (!row || !column) {
15
+ throw new Error('A Cell needs a Row');
16
+ }
17
+
18
+ this._row = row;
19
+ this._column = column;
20
+
21
+ colCache.validateAddress(address);
22
+ this._address = address;
23
+
24
+ // TODO: lazy evaluation of this._value
25
+ this._value = Value.create(Cell.Types.Null, this);
26
+
27
+ this.style = this._mergeStyle(row.style, column.style, {});
28
+
29
+ this._mergeCount = 0;
30
+ }
31
+
32
+ get worksheet() {
33
+ return this._row.worksheet;
34
+ }
35
+
36
+ get workbook() {
37
+ return this._row.worksheet.workbook;
38
+ }
39
+
40
+ // help GC by removing cyclic (and other) references
41
+ destroy() {
42
+ delete this.style;
43
+ delete this._value;
44
+ delete this._row;
45
+ delete this._column;
46
+ delete this._address;
47
+ }
48
+
49
+ // =========================================================================
50
+ // Styles stuff
51
+ get numFmt() {
52
+ return this.style.numFmt;
53
+ }
54
+
55
+ set numFmt(value) {
56
+ this.style.numFmt = value;
57
+ }
58
+
59
+ get font() {
60
+ return this.style.font;
61
+ }
62
+
63
+ set font(value) {
64
+ this.style.font = value;
65
+ }
66
+
67
+ get alignment() {
68
+ return this.style.alignment;
69
+ }
70
+
71
+ set alignment(value) {
72
+ this.style.alignment = value;
73
+ }
74
+
75
+ get border() {
76
+ return this.style.border;
77
+ }
78
+
79
+ set border(value) {
80
+ this.style.border = value;
81
+ }
82
+
83
+ get fill() {
84
+ return this.style.fill;
85
+ }
86
+
87
+ set fill(value) {
88
+ this.style.fill = value;
89
+ }
90
+
91
+ get protection() {
92
+ return this.style.protection;
93
+ }
94
+
95
+ set protection(value) {
96
+ this.style.protection = value;
97
+ }
98
+
99
+ _mergeStyle(rowStyle, colStyle, style) {
100
+ const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);
101
+ if (numFmt) style.numFmt = numFmt;
102
+
103
+ const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);
104
+ if (font) style.font = font;
105
+
106
+ const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);
107
+ if (alignment) style.alignment = alignment;
108
+
109
+ const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);
110
+ if (border) style.border = border;
111
+
112
+ const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);
113
+ if (fill) style.fill = fill;
114
+
115
+ const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);
116
+ if (protection) style.protection = protection;
117
+
118
+ return style;
119
+ }
120
+
121
+ // =========================================================================
122
+ // return the address for this cell
123
+ get address() {
124
+ return this._address;
125
+ }
126
+
127
+ get row() {
128
+ return this._row.number;
129
+ }
130
+
131
+ get col() {
132
+ return this._column.number;
133
+ }
134
+
135
+ get $col$row() {
136
+ return `$${this._column.letter}$${this.row}`;
137
+ }
138
+
139
+ // =========================================================================
140
+ // Value stuff
141
+
142
+ get type() {
143
+ return this._value.type;
144
+ }
145
+
146
+ get effectiveType() {
147
+ return this._value.effectiveType;
148
+ }
149
+
150
+ toCsvString() {
151
+ return this._value.toCsvString();
152
+ }
153
+
154
+ // =========================================================================
155
+ // Merge stuff
156
+
157
+ addMergeRef() {
158
+ this._mergeCount++;
159
+ }
160
+
161
+ releaseMergeRef() {
162
+ this._mergeCount--;
163
+ }
164
+
165
+ get isMerged() {
166
+ return this._mergeCount > 0 || this.type === Cell.Types.Merge;
167
+ }
168
+
169
+ merge(master, ignoreStyle) {
170
+ this._value.release();
171
+ this._value = Value.create(Cell.Types.Merge, this, master);
172
+ if (!ignoreStyle) {
173
+ this.style = master.style;
174
+ }
175
+ }
176
+
177
+ unmerge() {
178
+ if (this.type === Cell.Types.Merge) {
179
+ this._value.release();
180
+ this._value = Value.create(Cell.Types.Null, this);
181
+ this.style = this._mergeStyle(this._row.style, this._column.style, {});
182
+ }
183
+ }
184
+
185
+ isMergedTo(master) {
186
+ if (this._value.type !== Cell.Types.Merge) return false;
187
+ return this._value.isMergedTo(master);
188
+ }
189
+
190
+ get master() {
191
+ if (this.type === Cell.Types.Merge) {
192
+ return this._value.master;
193
+ }
194
+ return this; // an unmerged cell is its own master
195
+ }
196
+
197
+ get isHyperlink() {
198
+ return this._value.type === Cell.Types.Hyperlink;
199
+ }
200
+
201
+ get hyperlink() {
202
+ return this._value.hyperlink;
203
+ }
204
+
205
+ // return the value
206
+ get value() {
207
+ return this._value.value;
208
+ }
209
+
210
+ // set the value - can be number, string or raw
211
+ set value(v) {
212
+ // special case - merge cells set their master's value
213
+ if (this.type === Cell.Types.Merge) {
214
+ this._value.master.value = v;
215
+ return;
216
+ }
217
+
218
+ this._value.release();
219
+
220
+ // assign value
221
+ this._value = Value.create(Value.getType(v), this, v);
222
+ }
223
+
224
+ get note() {
225
+ return this._comment && this._comment.note;
226
+ }
227
+
228
+ set note(note) {
229
+ this._comment = new Note(note);
230
+ }
231
+
232
+ get text() {
233
+ return this._value.toString();
234
+ }
235
+
236
+ get html() {
237
+ return _.escapeHtml(this.text);
238
+ }
239
+
240
+ toString() {
241
+ return this.text;
242
+ }
243
+
244
+ _upgradeToHyperlink(hyperlink) {
245
+ // if this cell is a string, turn it into a Hyperlink
246
+ if (this.type === Cell.Types.String) {
247
+ this._value = Value.create(Cell.Types.Hyperlink, this, {
248
+ text: this._value.value,
249
+ hyperlink,
250
+ });
251
+ }
252
+ }
253
+
254
+ // =========================================================================
255
+ // Formula stuff
256
+ get formula() {
257
+ return this._value.formula;
258
+ }
259
+
260
+ get result() {
261
+ return this._value.result;
262
+ }
263
+
264
+ get formulaType() {
265
+ return this._value.formulaType;
266
+ }
267
+
268
+ // =========================================================================
269
+ // Name stuff
270
+ get fullAddress() {
271
+ const {worksheet} = this._row;
272
+ return {
273
+ sheetName: worksheet.name,
274
+ address: this.address,
275
+ row: this.row,
276
+ col: this.col,
277
+ };
278
+ }
279
+
280
+ get name() {
281
+ return this.names[0];
282
+ }
283
+
284
+ set name(value) {
285
+ this.names = [value];
286
+ }
287
+
288
+ get names() {
289
+ return this.workbook.definedNames.getNamesEx(this.fullAddress);
290
+ }
291
+
292
+ set names(value) {
293
+ const {definedNames} = this.workbook;
294
+ definedNames.removeAllNames(this.fullAddress);
295
+ value.forEach(name => {
296
+ definedNames.addEx(this.fullAddress, name);
297
+ });
298
+ }
299
+
300
+ addName(name) {
301
+ this.workbook.definedNames.addEx(this.fullAddress, name);
302
+ }
303
+
304
+ removeName(name) {
305
+ this.workbook.definedNames.removeEx(this.fullAddress, name);
306
+ }
307
+
308
+ removeAllNames() {
309
+ this.workbook.definedNames.removeAllNames(this.fullAddress);
310
+ }
311
+
312
+ // =========================================================================
313
+ // Data Validation stuff
314
+ get _dataValidations() {
315
+ return this.worksheet.dataValidations;
316
+ }
317
+
318
+ get dataValidation() {
319
+ return this._dataValidations.find(this.address);
320
+ }
321
+
322
+ set dataValidation(value) {
323
+ this._dataValidations.add(this.address, value);
324
+ }
325
+
326
+ // =========================================================================
327
+ // Model stuff
328
+
329
+ get model() {
330
+ const {model} = this._value;
331
+ model.style = this.style;
332
+ if (this._comment) {
333
+ model.comment = this._comment.model;
334
+ }
335
+ return model;
336
+ }
337
+
338
+ set model(value) {
339
+ this._value.release();
340
+ this._value = Value.create(value.type, this);
341
+ this._value.model = value;
342
+
343
+ if (value.comment) {
344
+ switch (value.comment.type) {
345
+ case 'note':
346
+ this._comment = Note.fromModel(value.comment);
347
+ break;
348
+ }
349
+ }
350
+
351
+ if (value.style) {
352
+ this.style = value.style;
353
+ } else {
354
+ this.style = {};
355
+ }
356
+ }
357
+ }
358
+ Cell.Types = Enums.ValueType;
359
+
360
+ // =============================================================================
361
+ // Internal Value Types
362
+
363
+ class NullValue {
364
+ constructor(cell) {
365
+ this.model = {
366
+ address: cell.address,
367
+ type: Cell.Types.Null,
368
+ };
369
+ }
370
+
371
+ get value() {
372
+ return null;
373
+ }
374
+
375
+ set value(value) {
376
+ // nothing to do
377
+ }
378
+
379
+ get type() {
380
+ return Cell.Types.Null;
381
+ }
382
+
383
+ get effectiveType() {
384
+ return Cell.Types.Null;
385
+ }
386
+
387
+ get address() {
388
+ return this.model.address;
389
+ }
390
+
391
+ set address(value) {
392
+ this.model.address = value;
393
+ }
394
+
395
+ toCsvString() {
396
+ return '';
397
+ }
398
+
399
+ release() {}
400
+
401
+ toString() {
402
+ return '';
403
+ }
404
+ }
405
+
406
+ class NumberValue {
407
+ constructor(cell, value) {
408
+ this.model = {
409
+ address: cell.address,
410
+ type: Cell.Types.Number,
411
+ value,
412
+ };
413
+ }
414
+
415
+ get value() {
416
+ return this.model.value;
417
+ }
418
+
419
+ set value(value) {
420
+ this.model.value = value;
421
+ }
422
+
423
+ get type() {
424
+ return Cell.Types.Number;
425
+ }
426
+
427
+ get effectiveType() {
428
+ return Cell.Types.Number;
429
+ }
430
+
431
+ get address() {
432
+ return this.model.address;
433
+ }
434
+
435
+ set address(value) {
436
+ this.model.address = value;
437
+ }
438
+
439
+ toCsvString() {
440
+ return this.model.value.toString();
441
+ }
442
+
443
+ release() {}
444
+
445
+ toString() {
446
+ return this.model.value.toString();
447
+ }
448
+ }
449
+
450
+ class StringValue {
451
+ constructor(cell, value) {
452
+ this.model = {
453
+ address: cell.address,
454
+ type: Cell.Types.String,
455
+ value,
456
+ };
457
+ }
458
+
459
+ get value() {
460
+ return this.model.value;
461
+ }
462
+
463
+ set value(value) {
464
+ this.model.value = value;
465
+ }
466
+
467
+ get type() {
468
+ return Cell.Types.String;
469
+ }
470
+
471
+ get effectiveType() {
472
+ return Cell.Types.String;
473
+ }
474
+
475
+ get address() {
476
+ return this.model.address;
477
+ }
478
+
479
+ set address(value) {
480
+ this.model.address = value;
481
+ }
482
+
483
+ toCsvString() {
484
+ return `"${this.model.value.replace(/"/g, '""')}"`;
485
+ }
486
+
487
+ release() {}
488
+
489
+ toString() {
490
+ return this.model.value;
491
+ }
492
+ }
493
+
494
+ class RichTextValue {
495
+ constructor(cell, value) {
496
+ this.model = {
497
+ address: cell.address,
498
+ type: Cell.Types.String,
499
+ value,
500
+ };
501
+ }
502
+
503
+ get value() {
504
+ return this.model.value;
505
+ }
506
+
507
+ set value(value) {
508
+ this.model.value = value;
509
+ }
510
+
511
+ toString() {
512
+ return this.model.value.richText.map(t => t.text).join('');
513
+ }
514
+
515
+ get type() {
516
+ return Cell.Types.RichText;
517
+ }
518
+
519
+ get effectiveType() {
520
+ return Cell.Types.RichText;
521
+ }
522
+
523
+ get address() {
524
+ return this.model.address;
525
+ }
526
+
527
+ set address(value) {
528
+ this.model.address = value;
529
+ }
530
+
531
+ toCsvString() {
532
+ return `"${this.text.replace(/"/g, '""')}"`;
533
+ }
534
+
535
+ release() {}
536
+ }
537
+
538
+ class DateValue {
539
+ constructor(cell, value) {
540
+ this.model = {
541
+ address: cell.address,
542
+ type: Cell.Types.Date,
543
+ value,
544
+ };
545
+ }
546
+
547
+ get value() {
548
+ return this.model.value;
549
+ }
550
+
551
+ set value(value) {
552
+ this.model.value = value;
553
+ }
554
+
555
+ get type() {
556
+ return Cell.Types.Date;
557
+ }
558
+
559
+ get effectiveType() {
560
+ return Cell.Types.Date;
561
+ }
562
+
563
+ get address() {
564
+ return this.model.address;
565
+ }
566
+
567
+ set address(value) {
568
+ this.model.address = value;
569
+ }
570
+
571
+ toCsvString() {
572
+ return this.model.value.toISOString();
573
+ }
574
+
575
+ release() {}
576
+
577
+ toString() {
578
+ return this.model.value.toString();
579
+ }
580
+ }
581
+
582
+ class HyperlinkValue {
583
+ constructor(cell, value) {
584
+ this.model = {
585
+ address: cell.address,
586
+ type: Cell.Types.Hyperlink,
587
+ text: value ? value.text : undefined,
588
+ hyperlink: value ? value.hyperlink : undefined,
589
+ };
590
+ if (value && value.tooltip) {
591
+ this.model.tooltip = value.tooltip;
592
+ }
593
+ }
594
+
595
+ get value() {
596
+ const v = {
597
+ text: this.model.text,
598
+ hyperlink: this.model.hyperlink,
599
+ };
600
+ if (this.model.tooltip) {
601
+ v.tooltip = this.model.tooltip;
602
+ }
603
+ return v;
604
+ }
605
+
606
+ set value(value) {
607
+ this.model = {
608
+ text: value.text,
609
+ hyperlink: value.hyperlink,
610
+ };
611
+ if (value.tooltip) {
612
+ this.model.tooltip = value.tooltip;
613
+ }
614
+ }
615
+
616
+ get text() {
617
+ return this.model.text;
618
+ }
619
+
620
+ set text(value) {
621
+ this.model.text = value;
622
+ }
623
+
624
+ /*
625
+ get tooltip() {
626
+ return this.model.tooltip;
627
+ }
628
+
629
+ set tooltip(value) {
630
+ this.model.tooltip = value;
631
+ } */
632
+
633
+ get hyperlink() {
634
+ return this.model.hyperlink;
635
+ }
636
+
637
+ set hyperlink(value) {
638
+ this.model.hyperlink = value;
639
+ }
640
+
641
+ get type() {
642
+ return Cell.Types.Hyperlink;
643
+ }
644
+
645
+ get effectiveType() {
646
+ return Cell.Types.Hyperlink;
647
+ }
648
+
649
+ get address() {
650
+ return this.model.address;
651
+ }
652
+
653
+ set address(value) {
654
+ this.model.address = value;
655
+ }
656
+
657
+ toCsvString() {
658
+ return this.model.hyperlink;
659
+ }
660
+
661
+ release() {}
662
+
663
+ toString() {
664
+ return this.model.text;
665
+ }
666
+ }
667
+
668
+ class MergeValue {
669
+ constructor(cell, master) {
670
+ this.model = {
671
+ address: cell.address,
672
+ type: Cell.Types.Merge,
673
+ master: master ? master.address : undefined,
674
+ };
675
+ this._master = master;
676
+ if (master) {
677
+ master.addMergeRef();
678
+ }
679
+ }
680
+
681
+ get value() {
682
+ return this._master.value;
683
+ }
684
+
685
+ set value(value) {
686
+ if (value instanceof Cell) {
687
+ if (this._master) {
688
+ this._master.releaseMergeRef();
689
+ }
690
+ value.addMergeRef();
691
+ this._master = value;
692
+ } else {
693
+ this._master.value = value;
694
+ }
695
+ }
696
+
697
+ isMergedTo(master) {
698
+ return master === this._master;
699
+ }
700
+
701
+ get master() {
702
+ return this._master;
703
+ }
704
+
705
+ get type() {
706
+ return Cell.Types.Merge;
707
+ }
708
+
709
+ get effectiveType() {
710
+ return this._master.effectiveType;
711
+ }
712
+
713
+ get address() {
714
+ return this.model.address;
715
+ }
716
+
717
+ set address(value) {
718
+ this.model.address = value;
719
+ }
720
+
721
+ toCsvString() {
722
+ return '';
723
+ }
724
+
725
+ release() {
726
+ this._master.releaseMergeRef();
727
+ }
728
+
729
+ toString() {
730
+ return this.value.toString();
731
+ }
732
+ }
733
+
734
+ class FormulaValue {
735
+ constructor(cell, value) {
736
+ this.cell = cell;
737
+
738
+ this.model = {
739
+ address: cell.address,
740
+ type: Cell.Types.Formula,
741
+ shareType: value ? value.shareType : undefined,
742
+ ref: value ? value.ref : undefined,
743
+ formula: value ? value.formula : undefined,
744
+ sharedFormula: value ? value.sharedFormula : undefined,
745
+ result: value ? value.result : undefined,
746
+ };
747
+ }
748
+
749
+ _copyModel(model) {
750
+ const copy = {};
751
+ const cp = name => {
752
+ const value = model[name];
753
+ if (value) {
754
+ copy[name] = value;
755
+ }
756
+ };
757
+ cp('formula');
758
+ cp('result');
759
+ cp('ref');
760
+ cp('shareType');
761
+ cp('sharedFormula');
762
+ return copy;
763
+ }
764
+
765
+ get value() {
766
+ return this._copyModel(this.model);
767
+ }
768
+
769
+ set value(value) {
770
+ this.model = this._copyModel(value);
771
+ }
772
+
773
+ validate(value) {
774
+ switch (Value.getType(value)) {
775
+ case Cell.Types.Null:
776
+ case Cell.Types.String:
777
+ case Cell.Types.Number:
778
+ case Cell.Types.Date:
779
+ break;
780
+ case Cell.Types.Hyperlink:
781
+ case Cell.Types.Formula:
782
+ default:
783
+ throw new Error('Cannot process that type of result value');
784
+ }
785
+ }
786
+
787
+ get dependencies() {
788
+ // find all the ranges and cells mentioned in the formula
789
+ const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g);
790
+ const cells = this.formula
791
+ .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, '')
792
+ .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);
793
+ return {
794
+ ranges,
795
+ cells,
796
+ };
797
+ }
798
+
799
+ get formula() {
800
+ return this.model.formula || this._getTranslatedFormula();
801
+ }
802
+
803
+ set formula(value) {
804
+ this.model.formula = value;
805
+ }
806
+
807
+ get formulaType() {
808
+ if (this.model.formula) {
809
+ return Enums.FormulaType.Master;
810
+ }
811
+ if (this.model.sharedFormula) {
812
+ return Enums.FormulaType.Shared;
813
+ }
814
+ return Enums.FormulaType.None;
815
+ }
816
+
817
+ get result() {
818
+ return this.model.result;
819
+ }
820
+
821
+ set result(value) {
822
+ this.model.result = value;
823
+ }
824
+
825
+ get type() {
826
+ return Cell.Types.Formula;
827
+ }
828
+
829
+ get effectiveType() {
830
+ const v = this.model.result;
831
+ if (v === null || v === undefined) {
832
+ return Enums.ValueType.Null;
833
+ }
834
+ if (v instanceof String || typeof v === 'string') {
835
+ return Enums.ValueType.String;
836
+ }
837
+ if (typeof v === 'number') {
838
+ return Enums.ValueType.Number;
839
+ }
840
+ if (v instanceof Date) {
841
+ return Enums.ValueType.Date;
842
+ }
843
+ if (v.text && v.hyperlink) {
844
+ return Enums.ValueType.Hyperlink;
845
+ }
846
+ if (v.formula) {
847
+ return Enums.ValueType.Formula;
848
+ }
849
+
850
+ return Enums.ValueType.Null;
851
+ }
852
+
853
+ get address() {
854
+ return this.model.address;
855
+ }
856
+
857
+ set address(value) {
858
+ this.model.address = value;
859
+ }
860
+
861
+ _getTranslatedFormula() {
862
+ if (!this._translatedFormula && this.model.sharedFormula) {
863
+ const {worksheet} = this.cell;
864
+ const master = worksheet.findCell(this.model.sharedFormula);
865
+ this._translatedFormula =
866
+ master && slideFormula(master.formula, master.address, this.model.address);
867
+ }
868
+ return this._translatedFormula;
869
+ }
870
+
871
+ toCsvString() {
872
+ return `${this.model.result || ''}`;
873
+ }
874
+
875
+ release() {}
876
+
877
+ toString() {
878
+ return this.model.result ? this.model.result.toString() : '';
879
+ }
880
+ }
881
+
882
+ class SharedStringValue {
883
+ constructor(cell, value) {
884
+ this.model = {
885
+ address: cell.address,
886
+ type: Cell.Types.SharedString,
887
+ value,
888
+ };
889
+ }
890
+
891
+ get value() {
892
+ return this.model.value;
893
+ }
894
+
895
+ set value(value) {
896
+ this.model.value = value;
897
+ }
898
+
899
+ get type() {
900
+ return Cell.Types.SharedString;
901
+ }
902
+
903
+ get effectiveType() {
904
+ return Cell.Types.SharedString;
905
+ }
906
+
907
+ get address() {
908
+ return this.model.address;
909
+ }
910
+
911
+ set address(value) {
912
+ this.model.address = value;
913
+ }
914
+
915
+ toCsvString() {
916
+ return this.model.value.toString();
917
+ }
918
+
919
+ release() {}
920
+
921
+ toString() {
922
+ return this.model.value.toString();
923
+ }
924
+ }
925
+
926
+ class BooleanValue {
927
+ constructor(cell, value) {
928
+ this.model = {
929
+ address: cell.address,
930
+ type: Cell.Types.Boolean,
931
+ value,
932
+ };
933
+ }
934
+
935
+ get value() {
936
+ return this.model.value;
937
+ }
938
+
939
+ set value(value) {
940
+ this.model.value = value;
941
+ }
942
+
943
+ get type() {
944
+ return Cell.Types.Boolean;
945
+ }
946
+
947
+ get effectiveType() {
948
+ return Cell.Types.Boolean;
949
+ }
950
+
951
+ get address() {
952
+ return this.model.address;
953
+ }
954
+
955
+ set address(value) {
956
+ this.model.address = value;
957
+ }
958
+
959
+ toCsvString() {
960
+ return this.model.value ? 1 : 0;
961
+ }
962
+
963
+ release() {}
964
+
965
+ toString() {
966
+ return this.model.value.toString();
967
+ }
968
+ }
969
+
970
+ class ErrorValue {
971
+ constructor(cell, value) {
972
+ this.model = {
973
+ address: cell.address,
974
+ type: Cell.Types.Error,
975
+ value,
976
+ };
977
+ }
978
+
979
+ get value() {
980
+ return this.model.value;
981
+ }
982
+
983
+ set value(value) {
984
+ this.model.value = value;
985
+ }
986
+
987
+ get type() {
988
+ return Cell.Types.Error;
989
+ }
990
+
991
+ get effectiveType() {
992
+ return Cell.Types.Error;
993
+ }
994
+
995
+ get address() {
996
+ return this.model.address;
997
+ }
998
+
999
+ set address(value) {
1000
+ this.model.address = value;
1001
+ }
1002
+
1003
+ toCsvString() {
1004
+ return this.toString();
1005
+ }
1006
+
1007
+ release() {}
1008
+
1009
+ toString() {
1010
+ return this.model.value.error.toString();
1011
+ }
1012
+ }
1013
+
1014
+ class JSONValue {
1015
+ constructor(cell, value) {
1016
+ this.model = {
1017
+ address: cell.address,
1018
+ type: Cell.Types.String,
1019
+ value: JSON.stringify(value),
1020
+ rawValue: value,
1021
+ };
1022
+ }
1023
+
1024
+ get value() {
1025
+ return this.model.rawValue;
1026
+ }
1027
+
1028
+ set value(value) {
1029
+ this.model.rawValue = value;
1030
+ this.model.value = JSON.stringify(value);
1031
+ }
1032
+
1033
+ get type() {
1034
+ return Cell.Types.String;
1035
+ }
1036
+
1037
+ get effectiveType() {
1038
+ return Cell.Types.String;
1039
+ }
1040
+
1041
+ get address() {
1042
+ return this.model.address;
1043
+ }
1044
+
1045
+ set address(value) {
1046
+ this.model.address = value;
1047
+ }
1048
+
1049
+ toCsvString() {
1050
+ return this.model.value;
1051
+ }
1052
+
1053
+ release() {}
1054
+
1055
+ toString() {
1056
+ return this.model.value;
1057
+ }
1058
+ }
1059
+
1060
+ // Value is a place to hold common static Value type functions
1061
+ const Value = {
1062
+ getType(value) {
1063
+ if (value === null || value === undefined) {
1064
+ return Cell.Types.Null;
1065
+ }
1066
+ if (value instanceof String || typeof value === 'string') {
1067
+ return Cell.Types.String;
1068
+ }
1069
+ if (typeof value === 'number') {
1070
+ return Cell.Types.Number;
1071
+ }
1072
+ if (typeof value === 'boolean') {
1073
+ return Cell.Types.Boolean;
1074
+ }
1075
+ if (value instanceof Date) {
1076
+ return Cell.Types.Date;
1077
+ }
1078
+ if (value.text && value.hyperlink) {
1079
+ return Cell.Types.Hyperlink;
1080
+ }
1081
+ if (value.formula || value.sharedFormula) {
1082
+ return Cell.Types.Formula;
1083
+ }
1084
+ if (value.richText) {
1085
+ return Cell.Types.RichText;
1086
+ }
1087
+ if (value.sharedString) {
1088
+ return Cell.Types.SharedString;
1089
+ }
1090
+ if (value.error) {
1091
+ return Cell.Types.Error;
1092
+ }
1093
+ return Cell.Types.JSON;
1094
+ },
1095
+
1096
+ // map valueType to constructor
1097
+ types: [
1098
+ {t: Cell.Types.Null, f: NullValue},
1099
+ {t: Cell.Types.Number, f: NumberValue},
1100
+ {t: Cell.Types.String, f: StringValue},
1101
+ {t: Cell.Types.Date, f: DateValue},
1102
+ {t: Cell.Types.Hyperlink, f: HyperlinkValue},
1103
+ {t: Cell.Types.Formula, f: FormulaValue},
1104
+ {t: Cell.Types.Merge, f: MergeValue},
1105
+ {t: Cell.Types.JSON, f: JSONValue},
1106
+ {t: Cell.Types.SharedString, f: SharedStringValue},
1107
+ {t: Cell.Types.RichText, f: RichTextValue},
1108
+ {t: Cell.Types.Boolean, f: BooleanValue},
1109
+ {t: Cell.Types.Error, f: ErrorValue},
1110
+ ].reduce((p, t) => {
1111
+ p[t.t] = t.f;
1112
+ return p;
1113
+ }, []),
1114
+
1115
+ create(type, cell, value) {
1116
+ const T = this.types[type];
1117
+ if (!T) {
1118
+ throw new Error(`Could not create Value of type ${type}`);
1119
+ }
1120
+ return new T(cell, value);
1121
+ },
1122
+ };
1123
+
1124
+ module.exports = Cell;