read-excel-file 7.0.2 → 8.0.0

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 (266) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +212 -205
  3. package/browser/index.cjs +8 -5
  4. package/browser/index.d.ts +58 -16
  5. package/browser/index.js +7 -5
  6. package/browser/input.d.ts +1 -0
  7. package/bundle/read-excel-file.min.js +1 -1
  8. package/bundle/read-excel-file.min.js.map +1 -1
  9. package/commonjs/export/parseSheet.js +20 -0
  10. package/commonjs/export/parseSheet.js.map +1 -0
  11. package/commonjs/export/readSheetBrowser.js +29 -0
  12. package/commonjs/export/readSheetBrowser.js.map +1 -0
  13. package/commonjs/export/readSheetNode.js +29 -0
  14. package/commonjs/export/readSheetNode.js.map +1 -0
  15. package/commonjs/export/readSheetUniversal.js +29 -0
  16. package/commonjs/export/readSheetUniversal.js.map +1 -0
  17. package/commonjs/export/readSheetWebWorker.js +29 -0
  18. package/commonjs/export/readSheetWebWorker.js.map +1 -0
  19. package/commonjs/export/readXlsxFileBrowser.js +6 -8
  20. package/commonjs/export/readXlsxFileBrowser.js.map +1 -1
  21. package/commonjs/export/readXlsxFileNode.js +7 -9
  22. package/commonjs/export/readXlsxFileNode.js.map +1 -1
  23. package/commonjs/export/readXlsxFileUniversal.js +7 -9
  24. package/commonjs/export/readXlsxFileUniversal.js.map +1 -1
  25. package/commonjs/export/readXlsxFileWebWorker.js +6 -8
  26. package/commonjs/export/readXlsxFileWebWorker.js.map +1 -1
  27. package/commonjs/export/unpackXlsxFileBrowser.js +2 -1
  28. package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -1
  29. package/commonjs/export/unpackXlsxFileNode.js +4 -3
  30. package/commonjs/export/unpackXlsxFileNode.js.map +1 -1
  31. package/commonjs/export/unpackXlsxFileUniversal.js +13 -3
  32. package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -1
  33. package/commonjs/parseData/InvalidError.js.map +1 -0
  34. package/commonjs/parseData/parseData.js +503 -0
  35. package/commonjs/parseData/parseData.js.map +1 -0
  36. package/commonjs/parseData/parseData.test.js.map +1 -0
  37. package/commonjs/{types → parseData/types}/Boolean.js +1 -1
  38. package/commonjs/parseData/types/Boolean.js.map +1 -0
  39. package/commonjs/parseData/types/Date.js +21 -0
  40. package/commonjs/parseData/types/Date.js.map +1 -0
  41. package/commonjs/{types → parseData/types}/Number.js +1 -1
  42. package/commonjs/parseData/types/Number.js.map +1 -0
  43. package/commonjs/{types → parseData/types}/String.js +1 -1
  44. package/commonjs/parseData/types/String.js.map +1 -0
  45. package/commonjs/{types → parseData/types/additional}/Email.js +3 -3
  46. package/commonjs/parseData/types/additional/Email.js.map +1 -0
  47. package/commonjs/parseData/types/additional/Email.test.js.map +1 -0
  48. package/commonjs/{types → parseData/types/additional}/Integer.js +2 -2
  49. package/commonjs/parseData/types/additional/Integer.js.map +1 -0
  50. package/commonjs/parseData/types/additional/Integer.test.js.map +1 -0
  51. package/commonjs/{types → parseData/types/additional}/URL.js +3 -3
  52. package/commonjs/parseData/types/additional/URL.js.map +1 -0
  53. package/commonjs/parseData/types/additional/URL.test.js.map +1 -0
  54. package/commonjs/xlsx/{getData.js → convertCellsToData2dArray.js} +16 -37
  55. package/commonjs/xlsx/convertCellsToData2dArray.js.map +1 -0
  56. package/commonjs/xlsx/{isDateTimestamp.js → isDateFormat.js} +58 -56
  57. package/commonjs/xlsx/isDateFormat.js.map +1 -0
  58. package/commonjs/xlsx/isDateFormat.test.js.map +1 -0
  59. package/commonjs/xlsx/isDateFormatStyle.js +193 -0
  60. package/commonjs/xlsx/isDateFormatStyle.js.map +1 -0
  61. package/commonjs/xlsx/parseCell.js +16 -18
  62. package/commonjs/xlsx/parseCell.js.map +1 -1
  63. package/commonjs/xlsx/parseCellCoordinates.js +44 -0
  64. package/commonjs/xlsx/parseCellCoordinates.js.map +1 -0
  65. package/commonjs/xlsx/parseCellValue.js +14 -11
  66. package/commonjs/xlsx/parseCellValue.js.map +1 -1
  67. package/commonjs/xlsx/parseCells.js +14 -6
  68. package/commonjs/xlsx/parseCells.js.map +1 -1
  69. package/commonjs/xlsx/parseExcelDate.js +139 -0
  70. package/commonjs/xlsx/parseExcelDate.js.map +1 -0
  71. package/commonjs/xlsx/parseExcelDate.test.js.map +1 -0
  72. package/commonjs/xlsx/parseSheet.js +9 -11
  73. package/commonjs/xlsx/parseSheet.js.map +1 -1
  74. package/commonjs/xlsx/{parseDimensions.js → parseSheetDimensions.js} +7 -6
  75. package/commonjs/xlsx/parseSheetDimensions.js.map +1 -0
  76. package/commonjs/xlsx/parseSpreadsheetContents.js +96 -0
  77. package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -0
  78. package/commonjs/xlsx/parseSpreadsheetInfo.js +47 -0
  79. package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -0
  80. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +29 -0
  81. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +1 -0
  82. package/commonjs/xml/xlsx.js +9 -9
  83. package/commonjs/xml/xlsx.js.map +1 -1
  84. package/commonjs/xml/xpath/xlsx-xpath.js +8 -8
  85. package/commonjs/xml/xpath/xlsx-xpath.js.map +1 -1
  86. package/commonjs/xml/xpath/xpathBrowser.js +4 -4
  87. package/commonjs/xml/xpath/xpathBrowser.js.map +1 -1
  88. package/commonjs/xml/xpath/xpathNode.js +2 -2
  89. package/commonjs/xml/xpath/xpathNode.js.map +1 -1
  90. package/modules/export/parseSheet.js +13 -0
  91. package/modules/export/parseSheet.js.map +1 -0
  92. package/modules/export/readSheetBrowser.js +23 -0
  93. package/modules/export/readSheetBrowser.js.map +1 -0
  94. package/modules/export/readSheetNode.js +23 -0
  95. package/modules/export/readSheetNode.js.map +1 -0
  96. package/modules/export/readSheetUniversal.js +23 -0
  97. package/modules/export/readSheetUniversal.js.map +1 -0
  98. package/modules/export/readSheetWebWorker.js +23 -0
  99. package/modules/export/readSheetWebWorker.js.map +1 -0
  100. package/modules/export/readXlsxFileBrowser.js +6 -8
  101. package/modules/export/readXlsxFileBrowser.js.map +1 -1
  102. package/modules/export/readXlsxFileNode.js +7 -9
  103. package/modules/export/readXlsxFileNode.js.map +1 -1
  104. package/modules/export/readXlsxFileUniversal.js +7 -9
  105. package/modules/export/readXlsxFileUniversal.js.map +1 -1
  106. package/modules/export/readXlsxFileWebWorker.js +6 -8
  107. package/modules/export/readXlsxFileWebWorker.js.map +1 -1
  108. package/modules/export/unpackXlsxFileBrowser.js +3 -1
  109. package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
  110. package/modules/export/unpackXlsxFileNode.js +4 -3
  111. package/modules/export/unpackXlsxFileNode.js.map +1 -1
  112. package/modules/export/unpackXlsxFileUniversal.js +13 -3
  113. package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
  114. package/modules/parseData/InvalidError.js.map +1 -0
  115. package/modules/parseData/parseData.js +494 -0
  116. package/modules/parseData/parseData.js.map +1 -0
  117. package/modules/parseData/parseData.test.js.map +1 -0
  118. package/modules/{types → parseData/types}/Boolean.js +1 -1
  119. package/modules/parseData/types/Boolean.js.map +1 -0
  120. package/modules/parseData/types/Date.js +14 -0
  121. package/modules/parseData/types/Date.js.map +1 -0
  122. package/modules/{types → parseData/types}/Number.js +1 -1
  123. package/modules/parseData/types/Number.js.map +1 -0
  124. package/modules/{types → parseData/types}/String.js +1 -1
  125. package/modules/parseData/types/String.js.map +1 -0
  126. package/modules/{types → parseData/types/additional}/Email.js +3 -3
  127. package/modules/parseData/types/additional/Email.js.map +1 -0
  128. package/modules/parseData/types/additional/Email.test.js.map +1 -0
  129. package/modules/{types → parseData/types/additional}/Integer.js +2 -2
  130. package/modules/parseData/types/additional/Integer.js.map +1 -0
  131. package/modules/parseData/types/additional/Integer.test.js.map +1 -0
  132. package/modules/{types → parseData/types/additional}/URL.js +3 -3
  133. package/modules/parseData/types/additional/URL.js.map +1 -0
  134. package/modules/parseData/types/additional/URL.test.js.map +1 -0
  135. package/modules/xlsx/{getData.js → convertCellsToData2dArray.js} +15 -36
  136. package/modules/xlsx/convertCellsToData2dArray.js.map +1 -0
  137. package/modules/xlsx/{isDateTimestamp.js → isDateFormat.js} +57 -55
  138. package/modules/xlsx/isDateFormat.js.map +1 -0
  139. package/modules/xlsx/isDateFormat.test.js.map +1 -0
  140. package/modules/xlsx/isDateFormatStyle.js +186 -0
  141. package/modules/xlsx/isDateFormatStyle.js.map +1 -0
  142. package/modules/xlsx/parseCell.js +17 -19
  143. package/modules/xlsx/parseCell.js.map +1 -1
  144. package/modules/xlsx/parseCellCoordinates.js +38 -0
  145. package/modules/xlsx/parseCellCoordinates.js.map +1 -0
  146. package/modules/xlsx/parseCellValue.js +14 -11
  147. package/modules/xlsx/parseCellValue.js.map +1 -1
  148. package/modules/xlsx/parseCells.js +14 -6
  149. package/modules/xlsx/parseCells.js.map +1 -1
  150. package/modules/xlsx/parseExcelDate.js +133 -0
  151. package/modules/xlsx/parseExcelDate.js.map +1 -0
  152. package/modules/xlsx/parseExcelDate.test.js.map +1 -0
  153. package/modules/xlsx/parseSheet.js +9 -11
  154. package/modules/xlsx/parseSheet.js.map +1 -1
  155. package/modules/xlsx/{parseDimensions.js → parseSheetDimensions.js} +4 -4
  156. package/modules/xlsx/parseSheetDimensions.js.map +1 -0
  157. package/modules/xlsx/parseSpreadsheetContents.js +91 -0
  158. package/modules/xlsx/parseSpreadsheetContents.js.map +1 -0
  159. package/modules/xlsx/parseSpreadsheetInfo.js +42 -0
  160. package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -0
  161. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +23 -0
  162. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +1 -0
  163. package/modules/xml/xlsx.js +6 -6
  164. package/modules/xml/xlsx.js.map +1 -1
  165. package/modules/xml/xpath/xlsx-xpath.js +6 -6
  166. package/modules/xml/xpath/xlsx-xpath.js.map +1 -1
  167. package/modules/xml/xpath/xpathBrowser.js +4 -4
  168. package/modules/xml/xpath/xpathBrowser.js.map +1 -1
  169. package/modules/xml/xpath/xpathNode.js +2 -2
  170. package/modules/xml/xpath/xpathNode.js.map +1 -1
  171. package/node/index.cjs +8 -5
  172. package/node/index.d.ts +56 -21
  173. package/node/index.js +7 -5
  174. package/node/input.d.ts +5 -0
  175. package/package.json +1 -1
  176. package/rollup.config.mjs +1 -1
  177. package/types/parseData/parseData.d.ts +38 -0
  178. package/types/parseData/parseDataError.d.ts +239 -0
  179. package/types/parseData/parseDataSchema.d.ts +48 -0
  180. package/types/parseData/parseDataValueType.d.ts +45 -0
  181. package/types/types.d.ts +20 -0
  182. package/universal/index.cjs +8 -5
  183. package/universal/index.d.ts +58 -16
  184. package/universal/index.js +7 -5
  185. package/universal/input.d.ts +1 -0
  186. package/web-worker/index.cjs +8 -5
  187. package/web-worker/index.d.ts +58 -16
  188. package/web-worker/index.js +7 -5
  189. package/web-worker/input.d.ts +1 -0
  190. package/commonjs/export/readSheetNamesBrowser.js +0 -23
  191. package/commonjs/export/readSheetNamesBrowser.js.map +0 -1
  192. package/commonjs/export/readSheetNamesNode.js +0 -23
  193. package/commonjs/export/readSheetNamesNode.js.map +0 -1
  194. package/commonjs/export/readSheetNamesUniversal.js +0 -23
  195. package/commonjs/export/readSheetNamesUniversal.js.map +0 -1
  196. package/commonjs/export/readSheetNamesWebWorker.js +0 -23
  197. package/commonjs/export/readSheetNamesWebWorker.js.map +0 -1
  198. package/commonjs/types/Boolean.js.map +0 -1
  199. package/commonjs/types/Date.js +0 -36
  200. package/commonjs/types/Date.js.map +0 -1
  201. package/commonjs/types/Email.js.map +0 -1
  202. package/commonjs/types/Email.test.js.map +0 -1
  203. package/commonjs/types/Integer.js.map +0 -1
  204. package/commonjs/types/Integer.test.js.map +0 -1
  205. package/commonjs/types/InvalidError.js.map +0 -1
  206. package/commonjs/types/Number.js.map +0 -1
  207. package/commonjs/types/String.js.map +0 -1
  208. package/commonjs/types/URL.js.map +0 -1
  209. package/commonjs/types/URL.test.js.map +0 -1
  210. package/commonjs/xlsx/coordinates.js +0 -55
  211. package/commonjs/xlsx/coordinates.js.map +0 -1
  212. package/commonjs/xlsx/getData.js.map +0 -1
  213. package/commonjs/xlsx/isDateTimestamp.js.map +0 -1
  214. package/commonjs/xlsx/parseDate.js +0 -73
  215. package/commonjs/xlsx/parseDate.js.map +0 -1
  216. package/commonjs/xlsx/parseDate.test.js.map +0 -1
  217. package/commonjs/xlsx/parseDimensions.js.map +0 -1
  218. package/commonjs/xlsx/parseProperties.js +0 -46
  219. package/commonjs/xlsx/parseProperties.js.map +0 -1
  220. package/commonjs/xlsx/parseXlsxFileContents.js +0 -119
  221. package/commonjs/xlsx/parseXlsxFileContents.js.map +0 -1
  222. package/commonjs/xlsx/parseXlsxFileContentsWithOptionalSchema.js +0 -45
  223. package/commonjs/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +0 -1
  224. package/commonjs/xlsx/schema/mapToObjects.js +0 -482
  225. package/commonjs/xlsx/schema/mapToObjects.js.map +0 -1
  226. package/commonjs/xlsx/schema/mapToObjects.test.js.map +0 -1
  227. package/modules/export/readSheetNamesBrowser.js +0 -17
  228. package/modules/export/readSheetNamesBrowser.js.map +0 -1
  229. package/modules/export/readSheetNamesNode.js +0 -17
  230. package/modules/export/readSheetNamesNode.js.map +0 -1
  231. package/modules/export/readSheetNamesUniversal.js +0 -17
  232. package/modules/export/readSheetNamesUniversal.js.map +0 -1
  233. package/modules/export/readSheetNamesWebWorker.js +0 -17
  234. package/modules/export/readSheetNamesWebWorker.js.map +0 -1
  235. package/modules/types/Boolean.js.map +0 -1
  236. package/modules/types/Date.js +0 -29
  237. package/modules/types/Date.js.map +0 -1
  238. package/modules/types/Email.js.map +0 -1
  239. package/modules/types/Email.test.js.map +0 -1
  240. package/modules/types/Integer.js.map +0 -1
  241. package/modules/types/Integer.test.js.map +0 -1
  242. package/modules/types/InvalidError.js.map +0 -1
  243. package/modules/types/Number.js.map +0 -1
  244. package/modules/types/String.js.map +0 -1
  245. package/modules/types/URL.js.map +0 -1
  246. package/modules/types/URL.test.js.map +0 -1
  247. package/modules/xlsx/coordinates.js +0 -48
  248. package/modules/xlsx/coordinates.js.map +0 -1
  249. package/modules/xlsx/getData.js.map +0 -1
  250. package/modules/xlsx/isDateTimestamp.js.map +0 -1
  251. package/modules/xlsx/parseDate.js +0 -67
  252. package/modules/xlsx/parseDate.js.map +0 -1
  253. package/modules/xlsx/parseDate.test.js.map +0 -1
  254. package/modules/xlsx/parseDimensions.js.map +0 -1
  255. package/modules/xlsx/parseProperties.js +0 -41
  256. package/modules/xlsx/parseProperties.js.map +0 -1
  257. package/modules/xlsx/parseXlsxFileContents.js +0 -114
  258. package/modules/xlsx/parseXlsxFileContents.js.map +0 -1
  259. package/modules/xlsx/parseXlsxFileContentsWithOptionalSchema.js +0 -39
  260. package/modules/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +0 -1
  261. package/modules/xlsx/schema/mapToObjects.js +0 -472
  262. package/modules/xlsx/schema/mapToObjects.js.map +0 -1
  263. package/modules/xlsx/schema/mapToObjects.test.js.map +0 -1
  264. package/types.d.ts +0 -121
  265. /package/commonjs/{types → parseData}/InvalidError.js +0 -0
  266. /package/modules/{types → parseData}/InvalidError.js +0 -0
@@ -0,0 +1,133 @@
1
+ // Parses an Excel Date (represented by a "serial" floating-point number)
2
+ // into a javascript `Date` in UTC+0 timezone (with time is set to 00:00).
3
+ //
4
+ // https://www.pcworld.com/article/3063622/software/mastering-excel-date-time-serial-numbers-networkdays-datevalue-and-more.html
5
+ // "If you need to calculate dates in your spreadsheets,
6
+ // Excel uses its own unique system, which it calls Serial Numbers".
7
+ //
8
+ export default function parseExcelDate(excelSerialDate, options) {
9
+ // Windows operating system uses floating-point numbers to represent dates,
10
+ // where the number represents the count of days elapsed since January 0th, 1900.
11
+ //
12
+ // This also means that there're 2 aspects associated with this choice:
13
+ //
14
+ // * January 1st, 1900, 00:00 is represented by `1` rather than `0`, which looks a bit weird.
15
+ // * 1900 is a special year because it's a "one in a 100 years" occasion when it's not a leap year.
16
+ //
17
+ // To work around those two aspects, Mac OS chose another baseline — January 1st, 1900.
18
+ // Although, that only postponed the second issue because 2100 is going to be the next "speciaL" year
19
+ // which is not going to be a "leap" one.
20
+ //
21
+ // Older versions of Excel on Mac OS used year 1904 as the default baseline for numeric dates.
22
+ // Since 2011, Microsoft Excel on Mac OS uses year 1900 as the default baseline for cross-platform consistency.
23
+ // https://support.microsoft.com/en-us/office/date-systems-in-excel-e7fe7167-48a9-4b96-bb53-5612a800b487
24
+ //
25
+ // So the 1904 baseline is now deprecated, although still available to be configured manually.
26
+ // So it still might be encountered in Excel files created on MacOS.
27
+ // In that case, the Excel file contains a special flag — `<workbook><workbookPr date1904="1"/>...` —
28
+ // that tells the application which baseline is being used for numeric date timestamps.
29
+ //
30
+ if (options && options.epoch1904) {
31
+ // Convert the numeric date timestamp from 1904 baseline to 1900 baseline.
32
+ excelSerialDate += (1904 - 1900) * DAYS_IN_YEAR + JANUARY_0TH_1900_DAY + ERRONEOUS_FEBRUARY_29_1990_DAY;
33
+ }
34
+ var daysBeforeUnixEpoch = JANUARY_0TH_1900_DAY + ERRONEOUS_FEBRUARY_29_1990_DAY + (1970 - 1900) * DAYS_IN_YEAR + NUMBER_OF_LEAP_YEARS_BETWEEN_1900_AND_1970;
35
+ return new Date(Math.floor((excelSerialDate - daysBeforeUnixEpoch) * DAY));
36
+ }
37
+
38
+ // "Excel serial date" is just a (fractional) count of days passed since `00/01/1900`.
39
+ //
40
+ // In contrast, "Unix timestamps" use `01/01/1970` as the baseline for numeric dates.
41
+ //
42
+ // In order to convert one into another, it should calculate the count of days elapsed
43
+ // since `00/01/1900` (Excel epoch) till `01/01/1970` (Unix epoch), or the count of days
44
+ // between year `1900` and year `1970`, plus one day.
45
+ //
46
+ // It also should account for the number of "leap years" between year `1900` and year `1970`,
47
+ // which is 17 of them. https://kalender-365.de/leap-years.php
48
+ //
49
+ // "One year has the length of 365 days, 5 hours, 48 minutes and 45 seconds.
50
+ // These are 365.2421875 days. This is hard to calculate with, so for practical reasons
51
+ // a normal year has been given 365 days and a leap year 366 days. In leap years,
52
+ // February 29th is added as leap day, which doesn't exist in a normal year.
53
+ // A leap year is every 4 years, but not every 100 years, then again every 400 years.
54
+ // So the year 1900 wasn't a leap year, but 2000 was".
55
+ //
56
+ // And also, Excel has a historical bug when it incorrectly assumes year `1900` to be a leap year,
57
+ // and, as a result, all Excel serial dates starting from March 1st, 1900 lag 1 day behind
58
+ // and require an additional 1 day to be added to them in order to be converted to a proper timestamp.
59
+ //
60
+ // https://learn.microsoft.com/en-us/answers/questions/5249322/why-does-microsoft-excel-considers-29-02-1900-to-b?forum=msoffice-all&referrer=answers#:~:text=This%20made%20it%20easier%20for,other%20programs%20that%20use%20dates.
61
+ //
62
+ // "When Lotus 1-2-3 was first released, the program assumed that the year 1900 was a leap year,
63
+ // even though it actually was not a leap year. This made it easier for the program to handle
64
+ // leap years and caused no harm to almost all date calculations in Lotus 1-2-3.
65
+ //
66
+ // When Microsoft Multiplan and Microsoft Excel were released, they also assumed that 1900
67
+ // was a leap year. This assumption allowed Microsoft Multiplan and Microsoft Excel to use
68
+ // the same serial date system used by Lotus 1-2-3 and provide greater compatibility with Lotus 1-2-3.
69
+ // Treating 1900 as a leap year also made it easier for users to move worksheets from one program
70
+ // to the other".
71
+ //
72
+ // So the historical bug is basically that Excel thinks that February 29th, 1900 existed
73
+ // while in reality it didn't. That's why it's actually 1 day off for any date after that one.
74
+ //
75
+ var NUMBER_OF_LEAP_YEARS_BETWEEN_1900_AND_1970 = 17;
76
+ var JANUARY_0TH_1900_DAY = 1;
77
+ var ERRONEOUS_FEBRUARY_29_1990_DAY = 1;
78
+
79
+ // An approximate count of seconds in a day is:
80
+ // 24 hours * 60 minutes in an hour * 60 seconds in a minute
81
+ //
82
+ // It is approximate because a minute could be longer than 60 seconds, due to "leap seconds".
83
+ //
84
+ // Still, javascript `Date`, and UNIX time in general, intentionally
85
+ // drop the concept of "leap seconds" in order to make things simpler.
86
+ // So this approximation is valid and doesn't result in any bugs.
87
+ // https://stackoverflow.com/questions/53019726/where-are-the-leap-seconds-in-javascript
88
+ //
89
+ // "The JavaScript Date object specifically adheres to the concept of Unix Time
90
+ // (albeit with higher precision). This is part of the POSIX specification,
91
+ // and thus is sometimes called "POSIX Time". It does not count leap seconds,
92
+ // but rather assumes every day had exactly 86,400 seconds. You can read about
93
+ // this in section 20.3.1.1 of the current ECMAScript specification, which states:
94
+ //
95
+ // "Time is measured in ECMAScript in milliseconds since 01 January, 1970 UTC.
96
+ // In time values leap seconds are ignored. It is assumed that there are exactly
97
+ // 86,400,000 milliseconds per day."
98
+ //
99
+ // The reason is that the unpredictable nature of leap seconds makes them very
100
+ // difficult to work with in APIs. One can't generally pass timestamps around
101
+ // that need leap seconds tables to be interpreted correctly, and expect that
102
+ // one system will interpret them the same as another. For example, a timestamp
103
+ // `1483228826` that accounts for "leap seconds" should've been interpreted as
104
+ // "2017-01-01T00:00:00Z", but if the receiver doesn't account for "leap seconds",
105
+ // they would interpret it as "2017-01-01T00:00:26Z" (e.g. POSIX-based systems like Linux),
106
+ // So "leap seconds" aren't really portable.
107
+ // Even on systems that have full frequently-updated "leap second" tables,
108
+ // there's no telling what adjustments those tables will contain in the future
109
+ // (i.e. beyond the 6-month IERS announcement period) because "leap seconds" can't be
110
+ // determined by a fixed mathematical formula or something like that. Instead,
111
+ // scientists introduce them as needed based on the observed Earth's rotation around the sun.
112
+ //
113
+ // "Because the Earth's rotational speed varies in response to climatic and geological events,
114
+ // UTC leap seconds are irregularly spaced and not precisely predictable. The decision to insert
115
+ // a leap second is made by the International Earth Rotation and Reference Systems Service (IERS),
116
+ // typically about six months in advance, to ensure that the difference between UTC and UT1
117
+ // does not exceed ±0.9 seconds."
118
+ //
119
+ // One example is year `1900` which is "every fourth year" but it still is not a "leap year".
120
+ //
121
+ // To reiterate: to support leap seconds in a programming language, the implementation
122
+ // must go out of its way to do so, and must make tradeoffs that are not always acceptable.
123
+ // Though there are exceptions, the general position is to not support them - not because
124
+ // of any subversion or active countermeasures, but because supporting them properly is much,
125
+ // much harder.
126
+ //
127
+ // https://en.wikipedia.org/wiki/Unix_time#Leap_seconds
128
+ // https://en.wikipedia.org/wiki/Leap_year
129
+ // https://en.wikipedia.org/wiki/Leap_second
130
+ //
131
+ var DAY = 24 * 60 * 60 * 1000;
132
+ var DAYS_IN_YEAR = 365;
133
+ //# sourceMappingURL=parseExcelDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseExcelDate.js","names":["parseExcelDate","excelSerialDate","options","epoch1904","DAYS_IN_YEAR","JANUARY_0TH_1900_DAY","ERRONEOUS_FEBRUARY_29_1990_DAY","daysBeforeUnixEpoch","NUMBER_OF_LEAP_YEARS_BETWEEN_1900_AND_1970","Date","Math","floor","DAY"],"sources":["../../source/xlsx/parseExcelDate.js"],"sourcesContent":["// Parses an Excel Date (represented by a \"serial\" floating-point number)\r\n// into a javascript `Date` in UTC+0 timezone (with time is set to 00:00).\r\n//\r\n// https://www.pcworld.com/article/3063622/software/mastering-excel-date-time-serial-numbers-networkdays-datevalue-and-more.html\r\n// \"If you need to calculate dates in your spreadsheets,\r\n// Excel uses its own unique system, which it calls Serial Numbers\".\r\n//\r\nexport default function parseExcelDate(excelSerialDate, options) {\r\n // Windows operating system uses floating-point numbers to represent dates,\r\n // where the number represents the count of days elapsed since January 0th, 1900.\r\n //\r\n // This also means that there're 2 aspects associated with this choice:\r\n //\r\n // * January 1st, 1900, 00:00 is represented by `1` rather than `0`, which looks a bit weird.\r\n // * 1900 is a special year because it's a \"one in a 100 years\" occasion when it's not a leap year.\r\n //\r\n // To work around those two aspects, Mac OS chose another baseline — January 1st, 1900.\r\n // Although, that only postponed the second issue because 2100 is going to be the next \"speciaL\" year\r\n // which is not going to be a \"leap\" one.\r\n //\r\n // Older versions of Excel on Mac OS used year 1904 as the default baseline for numeric dates.\r\n // Since 2011, Microsoft Excel on Mac OS uses year 1900 as the default baseline for cross-platform consistency.\r\n // https://support.microsoft.com/en-us/office/date-systems-in-excel-e7fe7167-48a9-4b96-bb53-5612a800b487\r\n //\r\n // So the 1904 baseline is now deprecated, although still available to be configured manually.\r\n // So it still might be encountered in Excel files created on MacOS.\r\n // In that case, the Excel file contains a special flag — `<workbook><workbookPr date1904=\"1\"/>...` —\r\n // that tells the application which baseline is being used for numeric date timestamps.\r\n //\r\n if (options && options.epoch1904) {\r\n // Convert the numeric date timestamp from 1904 baseline to 1900 baseline.\r\n excelSerialDate += (1904 - 1900) * DAYS_IN_YEAR + JANUARY_0TH_1900_DAY + ERRONEOUS_FEBRUARY_29_1990_DAY\r\n }\r\n\r\n const daysBeforeUnixEpoch = JANUARY_0TH_1900_DAY + ERRONEOUS_FEBRUARY_29_1990_DAY + (1970 - 1900) * DAYS_IN_YEAR + NUMBER_OF_LEAP_YEARS_BETWEEN_1900_AND_1970\r\n\r\n return new Date(Math.floor((excelSerialDate - daysBeforeUnixEpoch) * DAY))\r\n}\r\n\r\n// \"Excel serial date\" is just a (fractional) count of days passed since `00/01/1900`.\r\n//\r\n// In contrast, \"Unix timestamps\" use `01/01/1970` as the baseline for numeric dates.\r\n//\r\n// In order to convert one into another, it should calculate the count of days elapsed\r\n// since `00/01/1900` (Excel epoch) till `01/01/1970` (Unix epoch), or the count of days\r\n// between year `1900` and year `1970`, plus one day.\r\n//\r\n// It also should account for the number of \"leap years\" between year `1900` and year `1970`,\r\n// which is 17 of them. https://kalender-365.de/leap-years.php\r\n//\r\n// \"One year has the length of 365 days, 5 hours, 48 minutes and 45 seconds.\r\n// These are 365.2421875 days. This is hard to calculate with, so for practical reasons\r\n// a normal year has been given 365 days and a leap year 366 days. In leap years,\r\n// February 29th is added as leap day, which doesn't exist in a normal year.\r\n// A leap year is every 4 years, but not every 100 years, then again every 400 years.\r\n// So the year 1900 wasn't a leap year, but 2000 was\".\r\n//\r\n// And also, Excel has a historical bug when it incorrectly assumes year `1900` to be a leap year,\r\n// and, as a result, all Excel serial dates starting from March 1st, 1900 lag 1 day behind\r\n// and require an additional 1 day to be added to them in order to be converted to a proper timestamp.\r\n//\r\n// https://learn.microsoft.com/en-us/answers/questions/5249322/why-does-microsoft-excel-considers-29-02-1900-to-b?forum=msoffice-all&referrer=answers#:~:text=This%20made%20it%20easier%20for,other%20programs%20that%20use%20dates.\r\n//\r\n// \"When Lotus 1-2-3 was first released, the program assumed that the year 1900 was a leap year,\r\n// even though it actually was not a leap year. This made it easier for the program to handle\r\n// leap years and caused no harm to almost all date calculations in Lotus 1-2-3.\r\n//\r\n// When Microsoft Multiplan and Microsoft Excel were released, they also assumed that 1900\r\n// was a leap year. This assumption allowed Microsoft Multiplan and Microsoft Excel to use\r\n// the same serial date system used by Lotus 1-2-3 and provide greater compatibility with Lotus 1-2-3.\r\n// Treating 1900 as a leap year also made it easier for users to move worksheets from one program\r\n// to the other\".\r\n//\r\n// So the historical bug is basically that Excel thinks that February 29th, 1900 existed\r\n// while in reality it didn't. That's why it's actually 1 day off for any date after that one.\r\n//\r\nconst NUMBER_OF_LEAP_YEARS_BETWEEN_1900_AND_1970 = 17\r\nconst JANUARY_0TH_1900_DAY = 1\r\nconst ERRONEOUS_FEBRUARY_29_1990_DAY = 1\r\n\r\n// An approximate count of seconds in a day is:\r\n// 24 hours * 60 minutes in an hour * 60 seconds in a minute\r\n//\r\n// It is approximate because a minute could be longer than 60 seconds, due to \"leap seconds\".\r\n//\r\n// Still, javascript `Date`, and UNIX time in general, intentionally\r\n// drop the concept of \"leap seconds\" in order to make things simpler.\r\n// So this approximation is valid and doesn't result in any bugs.\r\n// https://stackoverflow.com/questions/53019726/where-are-the-leap-seconds-in-javascript\r\n//\r\n// \"The JavaScript Date object specifically adheres to the concept of Unix Time\r\n// (albeit with higher precision). This is part of the POSIX specification,\r\n// and thus is sometimes called \"POSIX Time\". It does not count leap seconds,\r\n// but rather assumes every day had exactly 86,400 seconds. You can read about\r\n// this in section 20.3.1.1 of the current ECMAScript specification, which states:\r\n//\r\n// \"Time is measured in ECMAScript in milliseconds since 01 January, 1970 UTC.\r\n// In time values leap seconds are ignored. It is assumed that there are exactly\r\n// 86,400,000 milliseconds per day.\"\r\n//\r\n// The reason is that the unpredictable nature of leap seconds makes them very\r\n// difficult to work with in APIs. One can't generally pass timestamps around\r\n// that need leap seconds tables to be interpreted correctly, and expect that\r\n// one system will interpret them the same as another. For example, a timestamp\r\n// `1483228826` that accounts for \"leap seconds\" should've been interpreted as\r\n// \"2017-01-01T00:00:00Z\", but if the receiver doesn't account for \"leap seconds\",\r\n// they would interpret it as \"2017-01-01T00:00:26Z\" (e.g. POSIX-based systems like Linux),\r\n// So \"leap seconds\" aren't really portable.\r\n// Even on systems that have full frequently-updated \"leap second\" tables,\r\n// there's no telling what adjustments those tables will contain in the future\r\n// (i.e. beyond the 6-month IERS announcement period) because \"leap seconds\" can't be\r\n// determined by a fixed mathematical formula or something like that. Instead,\r\n// scientists introduce them as needed based on the observed Earth's rotation around the sun.\r\n//\r\n// \"Because the Earth's rotational speed varies in response to climatic and geological events,\r\n// UTC leap seconds are irregularly spaced and not precisely predictable. The decision to insert\r\n// a leap second is made by the International Earth Rotation and Reference Systems Service (IERS),\r\n// typically about six months in advance, to ensure that the difference between UTC and UT1\r\n// does not exceed ±0.9 seconds.\"\r\n//\r\n// One example is year `1900` which is \"every fourth year\" but it still is not a \"leap year\".\r\n//\r\n// To reiterate: to support leap seconds in a programming language, the implementation\r\n// must go out of its way to do so, and must make tradeoffs that are not always acceptable.\r\n// Though there are exceptions, the general position is to not support them - not because\r\n// of any subversion or active countermeasures, but because supporting them properly is much,\r\n// much harder.\r\n//\r\n// https://en.wikipedia.org/wiki/Unix_time#Leap_seconds\r\n// https://en.wikipedia.org/wiki/Leap_year\r\n// https://en.wikipedia.org/wiki/Leap_second\r\n//\r\nconst DAY = 24 * 60 * 60 * 1000\r\nconst DAYS_IN_YEAR = 365\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASA,cAAcA,CAACC,eAAe,EAAEC,OAAO,EAAE;EAC/D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAIA,OAAO,IAAIA,OAAO,CAACC,SAAS,EAAE;IAChC;IACAF,eAAe,IAAI,CAAC,IAAI,GAAG,IAAI,IAAIG,YAAY,GAAGC,oBAAoB,GAAGC,8BAA8B;EACzG;EAEA,IAAMC,mBAAmB,GAAGF,oBAAoB,GAAGC,8BAA8B,GAAG,CAAC,IAAI,GAAG,IAAI,IAAIF,YAAY,GAAGI,0CAA0C;EAE7J,OAAO,IAAIC,IAAI,CAACC,IAAI,CAACC,KAAK,CAAC,CAACV,eAAe,GAAGM,mBAAmB,IAAIK,GAAG,CAAC,CAAC;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMJ,0CAA0C,GAAG,EAAE;AACrD,IAAMH,oBAAoB,GAAG,CAAC;AAC9B,IAAMC,8BAA8B,GAAG,CAAC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC/B,IAAMR,YAAY,GAAG,GAAG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseExcelDate.test.js","names":["describe","it","expect","parseExcelDate","date","Date","UTC","getTime","to","equal","DAYS_BETWEEN_1900_EPOCH_AND_1904_EPOCH","epoch1904"],"sources":["../../source/xlsx/parseExcelDate.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport parseExcelDate from './parseExcelDate.js'\r\n\r\ndescribe('parseExcelDate', () => {\r\n\tit('should parse Excel \"serial\" dates', () => {\r\n\t\tconst date = new Date(Date.UTC(2018, 3 - 1, 24))\r\n // Excel stores dates as integers.\r\n // E.g. '24/03/2018' === 43183\r\n\t\texpect(parseExcelDate(43183).getTime()).to.equal(date.getTime())\r\n\t})\r\n\r\n\tit('should parse Excel \"serial\" dates (1904 baseline)', () => {\r\n\t\tconst date = new Date(Date.UTC(2018, 3 - 1, 24))\r\n // Excel stores dates as integers.\r\n // E.g. '24/03/2018' === 43183\r\n\t\tconst DAYS_BETWEEN_1900_EPOCH_AND_1904_EPOCH = 1462\r\n\t\texpect(parseExcelDate(43183 - DAYS_BETWEEN_1900_EPOCH_AND_1904_EPOCH, { epoch1904: true }).getTime()).to.equal(date.getTime())\r\n\t})\r\n})\r\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,OAAOC,cAAc,MAAM,qBAAqB;AAEhDH,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAChCC,EAAE,CAAC,mCAAmC,EAAE,YAAM;IAC7C,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACA,IAAI,CAACC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C;IACA;IACFJ,MAAM,CAACC,cAAc,CAAC,KAAK,CAAC,CAACI,OAAO,CAAC,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAACL,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC;EACjE,CAAC,CAAC;EAEFN,EAAE,CAAC,mDAAmD,EAAE,YAAM;IAC7D,IAAMG,IAAI,GAAG,IAAIC,IAAI,CAACA,IAAI,CAACC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C;IACA;IACF,IAAMI,sCAAsC,GAAG,IAAI;IACnDR,MAAM,CAACC,cAAc,CAAC,KAAK,GAAGO,sCAAsC,EAAE;MAAEC,SAAS,EAAE;IAAK,CAAC,CAAC,CAACJ,OAAO,CAAC,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAACL,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC;EAC/H,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -1,16 +1,14 @@
1
1
  import parseCells from './parseCells.js';
2
- import parseDimensions from './parseDimensions.js';
3
- import { calculateDimensions } from './coordinates.js';
4
- export default function parseSheet(content, xml, values, styles, properties, options) {
5
- var sheet = xml.createDocument(content);
6
- var cells = parseCells(sheet, xml, values, styles, properties, options);
2
+ import parseSheetDimensions from './parseSheetDimensions.js';
3
+ import reconstructSheetDimensionsFromSheetCells from './reconstructSheetDimensionsFromSheetCells.js';
4
+ import convertSheetToData2dArray from './convertCellsToData2dArray.js';
5
+ export default function parseSheet(content, xml, sharedStrings, styles, epoch1904, options) {
6
+ var sheetDocument = xml.createDocument(content);
7
+ var cells = parseCells(sheetDocument, sharedStrings, styles, epoch1904, options);
7
8
 
8
- // `dimensions` defines the spreadsheet area containing all non-empty cells.
9
+ // `dimensions` defines the spreadsheet area enclosing all non-empty cells.
9
10
  // https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
10
- var dimensions = parseDimensions(sheet) || calculateDimensions(cells);
11
- return {
12
- cells: cells,
13
- dimensions: dimensions
14
- };
11
+ var dimensions = parseSheetDimensions(sheetDocument) || reconstructSheetDimensionsFromSheetCells(cells);
12
+ return convertSheetToData2dArray(cells, dimensions);
15
13
  }
16
14
  //# sourceMappingURL=parseSheet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseSheet.js","names":["parseCells","parseDimensions","calculateDimensions","parseSheet","content","xml","values","styles","properties","options","sheet","createDocument","cells","dimensions"],"sources":["../../source/xlsx/parseSheet.js"],"sourcesContent":["import parseCells from './parseCells.js'\r\nimport parseDimensions from './parseDimensions.js'\r\n\r\nimport { calculateDimensions } from './coordinates.js'\r\n\r\nexport default function parseSheet(content, xml, values, styles, properties, options) {\r\n const sheet = xml.createDocument(content)\r\n\r\n const cells = parseCells(sheet, xml, values, styles, properties, options)\r\n\r\n // `dimensions` defines the spreadsheet area containing all non-empty cells.\r\n // https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1\r\n const dimensions = parseDimensions(sheet) || calculateDimensions(cells)\r\n\r\n return { cells, dimensions }\r\n}"],"mappings":"AAAA,OAAOA,UAAU,MAAM,iBAAiB;AACxC,OAAOC,eAAe,MAAM,sBAAsB;AAElD,SAASC,mBAAmB,QAAQ,kBAAkB;AAEtD,eAAe,SAASC,UAAUA,CAACC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAE;EACpF,IAAMC,KAAK,GAAGL,GAAG,CAACM,cAAc,CAACP,OAAO,CAAC;EAEzC,IAAMQ,KAAK,GAAGZ,UAAU,CAACU,KAAK,EAAEL,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,OAAO,CAAC;;EAEzE;EACA;EACA,IAAMI,UAAU,GAAGZ,eAAe,CAACS,KAAK,CAAC,IAAIR,mBAAmB,CAACU,KAAK,CAAC;EAEvE,OAAO;IAAEA,KAAK,EAALA,KAAK;IAAEC,UAAU,EAAVA;EAAW,CAAC;AAC9B"}
1
+ {"version":3,"file":"parseSheet.js","names":["parseCells","parseSheetDimensions","reconstructSheetDimensionsFromSheetCells","convertSheetToData2dArray","parseSheet","content","xml","sharedStrings","styles","epoch1904","options","sheetDocument","createDocument","cells","dimensions"],"sources":["../../source/xlsx/parseSheet.js"],"sourcesContent":["import parseCells from './parseCells.js'\r\nimport parseSheetDimensions from './parseSheetDimensions.js'\r\nimport reconstructSheetDimensionsFromSheetCells from './reconstructSheetDimensionsFromSheetCells.js'\r\nimport convertSheetToData2dArray from './convertCellsToData2dArray.js'\r\n\r\nexport default function parseSheet(content, xml, sharedStrings, styles, epoch1904, options) {\r\n const sheetDocument = xml.createDocument(content)\r\n\r\n const cells = parseCells(sheetDocument, sharedStrings, styles, epoch1904, options)\r\n\r\n // `dimensions` defines the spreadsheet area enclosing all non-empty cells.\r\n // https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1\r\n const dimensions = parseSheetDimensions(sheetDocument) || reconstructSheetDimensionsFromSheetCells(cells)\r\n\r\n return convertSheetToData2dArray(cells, dimensions)\r\n}"],"mappings":"AAAA,OAAOA,UAAU,MAAM,iBAAiB;AACxC,OAAOC,oBAAoB,MAAM,2BAA2B;AAC5D,OAAOC,wCAAwC,MAAM,+CAA+C;AACpG,OAAOC,yBAAyB,MAAM,gCAAgC;AAEtE,eAAe,SAASC,UAAUA,CAACC,OAAO,EAAEC,GAAG,EAAEC,aAAa,EAAEC,MAAM,EAAEC,SAAS,EAAEC,OAAO,EAAE;EAC1F,IAAMC,aAAa,GAAGL,GAAG,CAACM,cAAc,CAACP,OAAO,CAAC;EAEjD,IAAMQ,KAAK,GAAGb,UAAU,CAACW,aAAa,EAAEJ,aAAa,EAAEC,MAAM,EAAEC,SAAS,EAAEC,OAAO,CAAC;;EAElF;EACA;EACA,IAAMI,UAAU,GAAGb,oBAAoB,CAACU,aAAa,CAAC,IAAIT,wCAAwC,CAACW,KAAK,CAAC;EAEzG,OAAOV,yBAAyB,CAACU,KAAK,EAAEC,UAAU,CAAC;AACrD"}
@@ -4,13 +4,13 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
5
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import { parseCellCoordinates } from './coordinates.js';
7
+ import parseCellCoordinates from './parseCellCoordinates.js';
8
8
  import { getDimensions } from '../xml/xlsx.js';
9
9
 
10
10
  // `dimensions` defines the spreadsheet area containing all non-empty cells.
11
11
  // https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
12
- export default function parseDimensions(sheet) {
13
- var dimensions = getDimensions(sheet);
12
+ export default function parseSheetDimensions(sheetDocument) {
13
+ var dimensions = getDimensions(sheetDocument);
14
14
  if (dimensions) {
15
15
  dimensions = dimensions.split(':').map(parseCellCoordinates).map(function (_ref) {
16
16
  var _ref2 = _slicedToArray(_ref, 2),
@@ -34,4 +34,4 @@ export default function parseDimensions(sheet) {
34
34
  return dimensions;
35
35
  }
36
36
  }
37
- //# sourceMappingURL=parseDimensions.js.map
37
+ //# sourceMappingURL=parseSheetDimensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSheetDimensions.js","names":["parseCellCoordinates","getDimensions","parseSheetDimensions","sheetDocument","dimensions","split","map","_ref","_ref2","_slicedToArray","row","column","length"],"sources":["../../source/xlsx/parseSheetDimensions.js"],"sourcesContent":["import parseCellCoordinates from './parseCellCoordinates.js'\r\n\r\nimport { getDimensions } from '../xml/xlsx.js'\r\n\r\n// `dimensions` defines the spreadsheet area containing all non-empty cells.\r\n// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1\r\nexport default function parseSheetDimensions(sheetDocument) {\r\n let dimensions = getDimensions(sheetDocument)\r\n if (dimensions) {\r\n dimensions = dimensions.split(':').map(parseCellCoordinates).map(([row, column]) => ({\r\n row,\r\n column\r\n }))\r\n // Sometimes there can be just a single cell as a spreadsheet's \"dimensions\".\r\n // For example, the default \"dimensions\" in Apache POI library is \"A1\",\r\n // meaning that only the first cell in the spreadsheet is used.\r\n //\r\n // A quote from Apache POI library:\r\n // \"Single cell ranges are formatted like single cell references (e.g. 'A1' instead of 'A1:A1').\"\r\n //\r\n if (dimensions.length === 1) {\r\n dimensions = [dimensions[0], dimensions[0]]\r\n }\r\n return dimensions\r\n }\r\n}\r\n"],"mappings":";;;;;;AAAA,OAAOA,oBAAoB,MAAM,2BAA2B;AAE5D,SAASC,aAAa,QAAQ,gBAAgB;;AAE9C;AACA;AACA,eAAe,SAASC,oBAAoBA,CAACC,aAAa,EAAE;EAC1D,IAAIC,UAAU,GAAGH,aAAa,CAACE,aAAa,CAAC;EAC7C,IAAIC,UAAU,EAAE;IACdA,UAAU,GAAGA,UAAU,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACN,oBAAoB,CAAC,CAACM,GAAG,CAAC,UAAAC,IAAA;MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA;QAAEG,GAAG,GAAAF,KAAA;QAAEG,MAAM,GAAAH,KAAA;MAAA,OAAO;QACnFE,GAAG,EAAHA,GAAG;QACHC,MAAM,EAANA;MACF,CAAC;IAAA,CAAC,CAAC;IACH;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAIP,UAAU,CAACQ,MAAM,KAAK,CAAC,EAAE;MAC3BR,UAAU,GAAG,CAACA,UAAU,CAAC,CAAC,CAAC,EAAEA,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7C;IACA,OAAOA,UAAU;EACnB;AACF"}
@@ -0,0 +1,91 @@
1
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4
+ import parseSpreadsheetInfo from './parseSpreadsheetInfo.js';
5
+ import parseFilePaths from './parseFilePaths.js';
6
+ import parseStyles from './parseStyles.js';
7
+ import parseSharedStrings from './parseSharedStrings.js';
8
+ import parseSheet from './parseSheet.js';
9
+
10
+ // For an introduction in reading `.xlsx` files see "The minimum viable XLSX reader":
11
+ // https://www.brendanlong.com/the-minimum-viable-xlsx-reader.html
12
+
13
+ /**
14
+ * Reads data from an `.xlsx` file.
15
+ * @param {Record<string,string>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).
16
+ * @param {object} xml — An object having a single property — `createDocument(string)` function.
17
+ * @param {object} [options]
18
+ * @return {ReadFileResult}
19
+ */
20
+ export default function parseSpreadsheetContents(contents, xml) {
21
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
+ var getFileContent = function getFileContent(filePath) {
23
+ if (!contents[filePath]) {
24
+ throw new Error("\"".concat(filePath, "\" file not found inside the *.xlsx file zip archive"));
25
+ }
26
+ return contents[filePath];
27
+ };
28
+
29
+ // Read the paths to certain files inside the `.xlsx` file, which is itself just a `.zip` archive.
30
+ // These paths aren't standardized between different spreadsheet editors.
31
+ // https://github.com/tidyverse/readxl/issues/104
32
+ var filePaths = parseFilePaths(getFileContent('xl/_rels/workbook.xml.rels'), xml);
33
+
34
+ // The usual file path for "shared strings" is "xl/sharedStrings.xml".
35
+ var sharedStrings = filePaths.sharedStrings ? parseSharedStrings(getFileContent(filePaths.sharedStrings), xml) : [];
36
+
37
+ // The usual file path for "styles" is "xl/styles.xml".
38
+ var styles = filePaths.styles ? parseStyles(getFileContent(filePaths.styles), xml) : {};
39
+ var _parseSpreadsheetInfo = parseSpreadsheetInfo(getFileContent('xl/workbook.xml'), xml),
40
+ sheets = _parseSpreadsheetInfo.sheets,
41
+ epoch1904 = _parseSpreadsheetInfo.epoch1904;
42
+ var sheetIdsToRead = options.sheets && options.sheets.map(function (sheet) {
43
+ return getSheetId(sheet, sheets);
44
+ });
45
+
46
+ // Parse sheets data.
47
+
48
+ var sheetsData = [];
49
+ for (var _i = 0, _Object$keys = Object.keys(filePaths.sheets); _i < _Object$keys.length; _i++) {
50
+ var sheetId = _Object$keys[_i];
51
+ if (sheetIdsToRead && !sheetIdsToRead.includes(sheetId)) {
52
+ continue;
53
+ }
54
+ sheetsData.push({
55
+ sheet: getSheetNameById(sheetId, sheets),
56
+ data: parseSheet(getFileContent(filePaths.sheets[sheetId]), xml, sharedStrings, styles, epoch1904, options)
57
+ });
58
+ }
59
+
60
+ // Return spreadsheet data.
61
+ return sheetsData;
62
+ }
63
+ function getSheetId(sheet, sheets) {
64
+ if (typeof sheet === 'string') {
65
+ for (var _iterator = _createForOfIteratorHelperLoose(sheets), _step; !(_step = _iterator()).done;) {
66
+ var _sheet = _step.value;
67
+ if (_sheet.name === sheet) {
68
+ return _sheet.relationId;
69
+ }
70
+ }
71
+ throw new Error("Sheet \"".concat(sheet, "\" not found. Available sheets: ").concat(sheets.map(function (_ref) {
72
+ var name = _ref.name;
73
+ return "\"".concat(name, "\"");
74
+ }).join(', ')));
75
+ } else {
76
+ if (sheet <= sheets.length) {
77
+ return sheets[sheet - 1].relationId;
78
+ }
79
+ throw new Error("Sheet number out of bounds: ".concat(sheet, ". Available sheets count: ").concat(sheets.length));
80
+ }
81
+ }
82
+ function getSheetNameById(sheetId, sheets) {
83
+ for (var _iterator2 = _createForOfIteratorHelperLoose(sheets), _step2; !(_step2 = _iterator2()).done;) {
84
+ var sheet = _step2.value;
85
+ if (sheet.relationId === sheetId) {
86
+ return sheet.name;
87
+ }
88
+ }
89
+ throw new Error("Sheet ID not found: ".concat(sheetId));
90
+ }
91
+ //# sourceMappingURL=parseSpreadsheetContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSpreadsheetContents.js","names":["parseSpreadsheetInfo","parseFilePaths","parseStyles","parseSharedStrings","parseSheet","parseSpreadsheetContents","contents","xml","options","arguments","length","undefined","getFileContent","filePath","Error","concat","filePaths","sharedStrings","styles","_parseSpreadsheetInfo","sheets","epoch1904","sheetIdsToRead","map","sheet","getSheetId","sheetsData","_i","_Object$keys","Object","keys","sheetId","includes","push","getSheetNameById","data","_iterator","_createForOfIteratorHelperLoose","_step","done","_sheet","value","name","relationId","_ref","join","_iterator2","_step2"],"sources":["../../source/xlsx/parseSpreadsheetContents.js"],"sourcesContent":["import parseSpreadsheetInfo from './parseSpreadsheetInfo.js'\r\nimport parseFilePaths from './parseFilePaths.js'\r\nimport parseStyles from './parseStyles.js'\r\nimport parseSharedStrings from './parseSharedStrings.js'\r\nimport parseSheet from './parseSheet.js'\r\n\r\n// For an introduction in reading `.xlsx` files see \"The minimum viable XLSX reader\":\r\n// https://www.brendanlong.com/the-minimum-viable-xlsx-reader.html\r\n\r\n/**\r\n * Reads data from an `.xlsx` file.\r\n * @param {Record<string,string>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).\r\n * @param {object} xml — An object having a single property — `createDocument(string)` function.\r\n * @param {object} [options]\r\n * @return {ReadFileResult}\r\n */\r\nexport default function parseSpreadsheetContents(contents, xml, options = {}) {\r\n const getFileContent = (filePath) => {\r\n if (!contents[filePath]) {\r\n throw new Error(`\"${filePath}\" file not found inside the *.xlsx file zip archive`)\r\n }\r\n return contents[filePath]\r\n }\r\n\r\n // Read the paths to certain files inside the `.xlsx` file, which is itself just a `.zip` archive.\r\n // These paths aren't standardized between different spreadsheet editors.\r\n // https://github.com/tidyverse/readxl/issues/104\r\n const filePaths = parseFilePaths(getFileContent('xl/_rels/workbook.xml.rels'), xml)\r\n\r\n // The usual file path for \"shared strings\" is \"xl/sharedStrings.xml\".\r\n const sharedStrings = filePaths.sharedStrings\r\n ? parseSharedStrings(getFileContent(filePaths.sharedStrings), xml)\r\n : []\r\n\r\n // The usual file path for \"styles\" is \"xl/styles.xml\".\r\n const styles = filePaths.styles\r\n ? parseStyles(getFileContent(filePaths.styles), xml)\r\n : {}\r\n\r\n const { sheets, epoch1904 } = parseSpreadsheetInfo(getFileContent('xl/workbook.xml'), xml)\r\n\r\n const sheetIdsToRead = options.sheets && options.sheets.map(sheet => getSheetId(sheet, sheets))\r\n\r\n // Parse sheets data.\r\n\r\n const sheetsData = []\r\n\r\n for (const sheetId of Object.keys(filePaths.sheets)) {\r\n if (sheetIdsToRead && !sheetIdsToRead.includes(sheetId)) {\r\n continue\r\n }\r\n\r\n sheetsData.push({\r\n sheet: getSheetNameById(sheetId, sheets),\r\n data: parseSheet(\r\n getFileContent(filePaths.sheets[sheetId]),\r\n xml,\r\n sharedStrings,\r\n styles,\r\n epoch1904,\r\n options\r\n )\r\n })\r\n }\r\n\r\n // Return spreadsheet data.\r\n return sheetsData\r\n}\r\n\r\nfunction getSheetId(sheet, sheets) {\r\n if (typeof sheet === 'string') {\r\n for (const _sheet of sheets) {\r\n if (_sheet.name === sheet) {\r\n return _sheet.relationId\r\n }\r\n }\r\n\t\tthrow new Error(`Sheet \"${sheet}\" not found. Available sheets: ${sheets.map(({ name }) => `\"${name}\"`).join(', ')}`)\r\n } else {\r\n\t\tif (sheet <= sheets.length) {\r\n return sheets[sheet - 1].relationId\r\n }\r\n throw new Error(`Sheet number out of bounds: ${sheet}. Available sheets count: ${sheets.length}`)\r\n }\r\n}\r\n\r\nfunction getSheetNameById(sheetId, sheets) {\r\n for (const sheet of sheets) {\r\n if (sheet.relationId === sheetId) {\r\n return sheet.name\r\n }\r\n }\r\n throw new Error(`Sheet ID not found: ${sheetId}`)\r\n}"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4
+ import { getWorkbookProperties, getSheets } from '../xml/xlsx.js';
5
+
6
+ // I guess `xl/workbook.xml` file should always be present inside the *.xlsx archive.
7
+ export default function parseSpreadsheetInfo(content, xml) {
8
+ var book = xml.createDocument(content);
9
+
10
+ // Read `<workbookPr/>` element to detect whether dates are 1900-based or 1904-based.
11
+ // https://support.microsoft.com/en-gb/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel
12
+ // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/workbookPr.html
13
+ var workbookProperties = getWorkbookProperties(book);
14
+ var epoch1904 = Boolean(workbookProperties) && workbookProperties.getAttribute('date1904') === '1';
15
+
16
+ // Example of `<sheets/>` element:
17
+ //
18
+ // <sheets>
19
+ // <sheet
20
+ // xmlns:ns="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
21
+ // name="Sheet1"
22
+ // sheetId="1"
23
+ // ns:id="rId3"/>
24
+ // </sheets>
25
+
26
+ var sheets = [];
27
+ for (var _iterator = _createForOfIteratorHelperLoose(getSheets(book)), _step; !(_step = _iterator()).done;) {
28
+ var sheet = _step.value;
29
+ if (sheet.getAttribute('name')) {
30
+ sheets.push({
31
+ id: sheet.getAttribute('sheetId'),
32
+ name: sheet.getAttribute('name'),
33
+ relationId: sheet.getAttribute('r:id')
34
+ });
35
+ }
36
+ }
37
+ return {
38
+ epoch1904: epoch1904,
39
+ sheets: sheets
40
+ };
41
+ }
42
+ //# sourceMappingURL=parseSpreadsheetInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSpreadsheetInfo.js","names":["getWorkbookProperties","getSheets","parseSpreadsheetInfo","content","xml","book","createDocument","workbookProperties","epoch1904","Boolean","getAttribute","sheets","_iterator","_createForOfIteratorHelperLoose","_step","done","sheet","value","push","id","name","relationId"],"sources":["../../source/xlsx/parseSpreadsheetInfo.js"],"sourcesContent":["import {\r\n getWorkbookProperties,\r\n getSheets\r\n} from '../xml/xlsx.js'\r\n\r\n// I guess `xl/workbook.xml` file should always be present inside the *.xlsx archive.\r\nexport default function parseSpreadsheetInfo(content, xml) {\r\n const book = xml.createDocument(content)\r\n\r\n // Read `<workbookPr/>` element to detect whether dates are 1900-based or 1904-based.\r\n // https://support.microsoft.com/en-gb/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel\r\n // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/workbookPr.html\r\n const workbookProperties = getWorkbookProperties(book)\r\n const epoch1904 = Boolean(workbookProperties) && workbookProperties.getAttribute('date1904') === '1'\r\n\r\n // Example of `<sheets/>` element:\r\n //\r\n // <sheets>\r\n // <sheet\r\n // xmlns:ns=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n // name=\"Sheet1\"\r\n // sheetId=\"1\"\r\n // ns:id=\"rId3\"/>\r\n // </sheets>\r\n\r\n const sheets = []\r\n for (const sheet of getSheets(book)) {\r\n if (sheet.getAttribute('name')) {\r\n sheets.push({\r\n id: sheet.getAttribute('sheetId'),\r\n name: sheet.getAttribute('name'),\r\n relationId: sheet.getAttribute('r:id')\r\n })\r\n }\r\n }\r\n\r\n return {\r\n epoch1904,\r\n sheets\r\n }\r\n}"],"mappings":";;;AAAA,SACEA,qBAAqB,EACrBC,SAAS,QACJ,gBAAgB;;AAEvB;AACA,eAAe,SAASC,oBAAoBA,CAACC,OAAO,EAAEC,GAAG,EAAE;EACzD,IAAMC,IAAI,GAAGD,GAAG,CAACE,cAAc,CAACH,OAAO,CAAC;;EAExC;EACA;EACA;EACA,IAAMI,kBAAkB,GAAGP,qBAAqB,CAACK,IAAI,CAAC;EACtD,IAAMG,SAAS,GAAGC,OAAO,CAACF,kBAAkB,CAAC,IAAIA,kBAAkB,CAACG,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG;;EAEpG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA,IAAMC,MAAM,GAAG,EAAE;EACjB,SAAAC,SAAA,GAAAC,+BAAA,CAAoBZ,SAAS,CAACI,IAAI,CAAC,GAAAS,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAA1BC,KAAK,GAAAF,KAAA,CAAAG,KAAA;IACd,IAAID,KAAK,CAACN,YAAY,CAAC,MAAM,CAAC,EAAE;MAC9BC,MAAM,CAACO,IAAI,CAAC;QACVC,EAAE,EAAEH,KAAK,CAACN,YAAY,CAAC,SAAS,CAAC;QACjCU,IAAI,EAAEJ,KAAK,CAACN,YAAY,CAAC,MAAM,CAAC;QAChCW,UAAU,EAAEL,KAAK,CAACN,YAAY,CAAC,MAAM;MACvC,CAAC,CAAC;IACJ;EACF;EAEA,OAAO;IACLF,SAAS,EAATA,SAAS;IACTG,MAAM,EAANA;EACF,CAAC;AACH"}
@@ -0,0 +1,23 @@
1
+ export default function reconstructSheetDimensionsFromSheetCells(cells) {
2
+ var comparator = function comparator(a, b) {
3
+ return a - b;
4
+ };
5
+ var allRows = cells.map(function (cell) {
6
+ return cell.row;
7
+ }).sort(comparator);
8
+ var allCols = cells.map(function (cell) {
9
+ return cell.column;
10
+ }).sort(comparator);
11
+ var minRow = allRows[0];
12
+ var maxRow = allRows[allRows.length - 1];
13
+ var minCol = allCols[0];
14
+ var maxCol = allCols[allCols.length - 1];
15
+ return [{
16
+ row: minRow,
17
+ column: minCol
18
+ }, {
19
+ row: maxRow,
20
+ column: maxCol
21
+ }];
22
+ }
23
+ //# sourceMappingURL=reconstructSheetDimensionsFromSheetCells.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconstructSheetDimensionsFromSheetCells.js","names":["reconstructSheetDimensionsFromSheetCells","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol"],"sources":["../../source/xlsx/reconstructSheetDimensionsFromSheetCells.js"],"sourcesContent":["export default function reconstructSheetDimensionsFromSheetCells(cells) {\r\n const comparator = (a, b) => a - b\r\n const allRows = cells.map(cell => cell.row).sort(comparator)\r\n const allCols = cells.map(cell => cell.column).sort(comparator)\r\n const minRow = allRows[0]\r\n const maxRow = allRows[allRows.length - 1]\r\n const minCol = allCols[0]\r\n const maxCol = allCols[allCols.length - 1]\r\n return [\r\n { row: minRow, column: minCol },\r\n { row: maxRow, column: maxCol }\r\n ]\r\n}\r\n"],"mappings":"AAAA,eAAe,SAASA,wCAAwCA,CAACC,KAAK,EAAE;EACtE,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,CAAC,EAAEC,CAAC;IAAA,OAAKD,CAAC,GAAGC,CAAC;EAAA;EAClC,IAAMC,OAAO,GAAGJ,KAAK,CAACK,GAAG,CAAC,UAAAC,IAAI;IAAA,OAAIA,IAAI,CAACC,GAAG;EAAA,EAAC,CAACC,IAAI,CAACP,UAAU,CAAC;EAC5D,IAAMQ,OAAO,GAAGT,KAAK,CAACK,GAAG,CAAC,UAAAC,IAAI;IAAA,OAAIA,IAAI,CAACI,MAAM;EAAA,EAAC,CAACF,IAAI,CAACP,UAAU,CAAC;EAC/D,IAAMU,MAAM,GAAGP,OAAO,CAAC,CAAC,CAAC;EACzB,IAAMQ,MAAM,GAAGR,OAAO,CAACA,OAAO,CAACS,MAAM,GAAG,CAAC,CAAC;EAC1C,IAAMC,MAAM,GAAGL,OAAO,CAAC,CAAC,CAAC;EACzB,IAAMM,MAAM,GAAGN,OAAO,CAACA,OAAO,CAACI,MAAM,GAAG,CAAC,CAAC;EAC1C,OAAO,CACL;IAAEN,GAAG,EAAEI,MAAM;IAAED,MAAM,EAAEI;EAAO,CAAC,EAC/B;IAAEP,GAAG,EAAEK,MAAM;IAAEF,MAAM,EAAEK;EAAO,CAAC,CAChC;AACH"}
@@ -2,7 +2,7 @@ import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName
2
2
 
3
3
  // Returns an array of cells,
4
4
  // each element being an XML DOM element representing a cell.
5
- export function getCells(document) {
5
+ export function getCellElements(document) {
6
6
  var worksheet = document.documentElement;
7
7
  var sheetData = findChild(worksheet, 'sheetData');
8
8
  var cells = [];
@@ -13,7 +13,7 @@ export function getCells(document) {
13
13
  });
14
14
  return cells;
15
15
  }
16
- export function getMergedCells(document) {
16
+ export function getMergedCellCoordinates(document) {
17
17
  var worksheet = document.documentElement;
18
18
  var mergedCells = findChild(worksheet, 'mergeCells');
19
19
  var mergedCellsInfo = [];
@@ -24,15 +24,15 @@ export function getMergedCells(document) {
24
24
  }
25
25
  return mergedCellsInfo;
26
26
  }
27
- export function getCellValue(document, node) {
28
- return findChild(node, 'v');
27
+ export function getCellValueElement(document, element) {
28
+ return findChild(element, 'v');
29
29
  }
30
- export function getCellInlineStringValue(document, node) {
30
+ export function getCellInlineStringValue(document, element) {
31
31
  // It seems as if in some weirdly-output "*.xlsx" files
32
32
  // there're non-element nodes of some weird nature.
33
33
  // https://gitlab.com/catamphetamine/read-excel-file/-/issues/109
34
34
  // This code filters out such weird non-element nodes.
35
- var firstElementChild = getFirstElementChild(node);
35
+ var firstElementChild = getFirstElementChild(element);
36
36
  if (firstElementChild && getTagName(firstElementChild) === 'is') {
37
37
  var firstElementChildFirstElementChild = getFirstElementChild(firstElementChild);
38
38
  if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') {
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","getFirstElementChild","getTagName","getCells","document","worksheet","documentElement","sheetData","cells","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstElementChild","firstElementChildFirstElementChild","textContent","getDimensions","dimensions","getBaseStyles","styleSheet","cellStyleXfs","getCellStyles","cellXfs","getNumberFormats","numberFormats","numFmts","getSharedStrings","sst","string","t","value","r","getWorkbookProperties","workbook","getRelationships","relationships","getSheets","sheets"],"sources":["../../source/xml/xlsx.js"],"sourcesContent":["import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName } from './dom.js'\r\n\r\n// Returns an array of cells,\r\n// each element being an XML DOM element representing a cell.\r\nexport function getCells(document) {\r\n const worksheet = document.documentElement\r\n const sheetData = findChild(worksheet, 'sheetData')\r\n\r\n const cells = []\r\n forEach(sheetData, 'row', (row) => {\r\n forEach(row, 'c', (cell) => {\r\n cells.push(cell)\r\n })\r\n })\r\n return cells\r\n}\r\n\r\nexport function getMergedCells(document) {\r\n const worksheet = document.documentElement\r\n const mergedCells = findChild(worksheet, 'mergeCells')\r\n const mergedCellsInfo = []\r\n if (mergedCells) {\r\n forEach(mergedCells, 'mergeCell', (mergedCell) => {\r\n mergedCellsInfo.push(mergedCell.getAttribute('ref'))\r\n })\r\n }\r\n return mergedCellsInfo\r\n}\r\n\r\nexport function getCellValue(document, node) {\r\n return findChild(node, 'v')\r\n}\r\n\r\nexport function getCellInlineStringValue(document, node) {\r\n // It seems as if in some weirdly-output \"*.xlsx\" files\r\n // there're non-element nodes of some weird nature.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/109\r\n // This code filters out such weird non-element nodes.\r\n const firstElementChild = getFirstElementChild(node)\r\n if (firstElementChild && getTagName(firstElementChild) === 'is') {\r\n const firstElementChildFirstElementChild = getFirstElementChild(firstElementChild)\r\n if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') {\r\n return firstElementChildFirstElementChild.textContent\r\n }\r\n }\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const worksheet = document.documentElement\r\n const dimensions = findChild(worksheet, 'dimension')\r\n if (dimensions) {\r\n return dimensions.getAttribute('ref')\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellStyleXfs = findChild(styleSheet, 'cellStyleXfs')\r\n if (cellStyleXfs) {\r\n return findChildren(cellStyleXfs, 'xf')\r\n }\r\n return []\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellXfs = findChild(styleSheet, 'cellXfs')\r\n if (!cellXfs) {\r\n return []\r\n }\r\n return findChildren(cellXfs, 'xf')\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n const styleSheet = document.documentElement\r\n let numberFormats = []\r\n const numFmts = findChild(styleSheet, 'numFmts')\r\n if (numFmts) {\r\n return findChildren(numFmts, 'numFmt')\r\n }\r\n return []\r\n}\r\n\r\nexport function getSharedStrings(document) {\r\n\t// An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` (\"rich formatting\") elements having `<t/>`.\r\n\t// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1\r\n\t// http://www.datypic.com/sc/ooxml/e-ssml_si-1.html\r\n\r\n const sst = document.documentElement\r\n return map(sst, 'si', string => {\r\n const t = findChild(string, 't')\r\n if (t) {\r\n return t.textContent\r\n }\r\n let value = ''\r\n forEach(string, 'r', (r) => {\r\n value += findChild(r, 't').textContent\r\n })\r\n return value\r\n })\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n const workbook = document.documentElement\r\n return findChild(workbook, 'workbookPr')\r\n}\r\n\r\nexport function getRelationships(document) {\r\n const relationships = document.documentElement\r\n return findChildren(relationships, 'Relationship')\r\n}\r\n\r\nexport function getSheets(document) {\r\n const workbook = document.documentElement\r\n const sheets = findChild(workbook, 'sheets')\r\n return findChildren(sheets, 'sheet')\r\n}"],"mappings":"AAAA,SAASA,SAAS,EAAEC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAEC,oBAAoB,EAAEC,UAAU,QAAQ,UAAU;;AAElG;AACA;AACA,OAAO,SAASC,QAAQA,CAACC,QAAQ,EAAE;EACjC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAAe;EAC1C,IAAMC,SAAS,GAAGV,SAAS,CAACQ,SAAS,EAAE,WAAW,CAAC;EAEnD,IAAMG,KAAK,GAAG,EAAE;EAChBT,OAAO,CAACQ,SAAS,EAAE,KAAK,EAAE,UAACE,GAAG,EAAK;IACjCV,OAAO,CAACU,GAAG,EAAE,GAAG,EAAE,UAACC,IAAI,EAAK;MAC1BF,KAAK,CAACG,IAAI,CAACD,IAAI,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,OAAOF,KAAK;AACd;AAEA,OAAO,SAASI,cAAcA,CAACR,QAAQ,EAAE;EACvC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAAe;EAC1C,IAAMO,WAAW,GAAGhB,SAAS,CAACQ,SAAS,EAAE,YAAY,CAAC;EACtD,IAAMS,eAAe,GAAG,EAAE;EAC1B,IAAID,WAAW,EAAE;IACfd,OAAO,CAACc,WAAW,EAAE,WAAW,EAAE,UAACE,UAAU,EAAK;MAChDD,eAAe,CAACH,IAAI,CAACI,UAAU,CAACC,YAAY,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;EACJ;EACA,OAAOF,eAAe;AACxB;AAEA,OAAO,SAASG,YAAYA,CAACb,QAAQ,EAAEc,IAAI,EAAE;EAC3C,OAAOrB,SAAS,CAACqB,IAAI,EAAE,GAAG,CAAC;AAC7B;AAEA,OAAO,SAASC,wBAAwBA,CAACf,QAAQ,EAAEc,IAAI,EAAE;EACvD;EACA;EACA;EACA;EACA,IAAME,iBAAiB,GAAGnB,oBAAoB,CAACiB,IAAI,CAAC;EACpD,IAAIE,iBAAiB,IAAIlB,UAAU,CAACkB,iBAAiB,CAAC,KAAK,IAAI,EAAE;IAC/D,IAAMC,kCAAkC,GAAGpB,oBAAoB,CAACmB,iBAAiB,CAAC;IAClF,IAAIC,kCAAkC,IAAInB,UAAU,CAACmB,kCAAkC,CAAC,KAAK,GAAG,EAAE;MAChG,OAAOA,kCAAkC,CAACC,WAAW;IACvD;EACF;AACF;AAEA,OAAO,SAASC,aAAaA,CAACnB,QAAQ,EAAE;EACtC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAAe;EAC1C,IAAMkB,UAAU,GAAG3B,SAAS,CAACQ,SAAS,EAAE,WAAW,CAAC;EACpD,IAAImB,UAAU,EAAE;IACd,OAAOA,UAAU,CAACR,YAAY,CAAC,KAAK,CAAC;EACvC;AACF;AAEA,OAAO,SAASS,aAAaA,CAACrB,QAAQ,EAAE;EACtC,IAAMsB,UAAU,GAAGtB,QAAQ,CAACE,eAAe;EAC3C,IAAMqB,YAAY,GAAG9B,SAAS,CAAC6B,UAAU,EAAE,cAAc,CAAC;EAC1D,IAAIC,YAAY,EAAE;IAChB,OAAO7B,YAAY,CAAC6B,YAAY,EAAE,IAAI,CAAC;EACzC;EACA,OAAO,EAAE;AACX;AAEA,OAAO,SAASC,aAAaA,CAACxB,QAAQ,EAAE;EACtC,IAAMsB,UAAU,GAAGtB,QAAQ,CAACE,eAAe;EAC3C,IAAMuB,OAAO,GAAGhC,SAAS,CAAC6B,UAAU,EAAE,SAAS,CAAC;EAChD,IAAI,CAACG,OAAO,EAAE;IACZ,OAAO,EAAE;EACX;EACA,OAAO/B,YAAY,CAAC+B,OAAO,EAAE,IAAI,CAAC;AACpC;AAEA,OAAO,SAASC,gBAAgBA,CAAC1B,QAAQ,EAAE;EACzC,IAAMsB,UAAU,GAAGtB,QAAQ,CAACE,eAAe;EAC3C,IAAIyB,aAAa,GAAG,EAAE;EACtB,IAAMC,OAAO,GAAGnC,SAAS,CAAC6B,UAAU,EAAE,SAAS,CAAC;EAChD,IAAIM,OAAO,EAAE;IACX,OAAOlC,YAAY,CAACkC,OAAO,EAAE,QAAQ,CAAC;EACxC;EACA,OAAO,EAAE;AACX;AAEA,OAAO,SAASC,gBAAgBA,CAAC7B,QAAQ,EAAE;EAC1C;EACA;EACA;;EAEC,IAAM8B,GAAG,GAAG9B,QAAQ,CAACE,eAAe;EACpC,OAAON,GAAG,CAACkC,GAAG,EAAE,IAAI,EAAE,UAAAC,MAAM,EAAI;IAC9B,IAAMC,CAAC,GAAGvC,SAAS,CAACsC,MAAM,EAAE,GAAG,CAAC;IAChC,IAAIC,CAAC,EAAE;MACL,OAAOA,CAAC,CAACd,WAAW;IACtB;IACA,IAAIe,KAAK,GAAG,EAAE;IACdtC,OAAO,CAACoC,MAAM,EAAE,GAAG,EAAE,UAACG,CAAC,EAAK;MAC1BD,KAAK,IAAIxC,SAAS,CAACyC,CAAC,EAAE,GAAG,CAAC,CAAChB,WAAW;IACxC,CAAC,CAAC;IACF,OAAOe,KAAK;EACd,CAAC,CAAC;AACJ;AAEA,OAAO,SAASE,qBAAqBA,CAACnC,QAAQ,EAAE;EAC9C,IAAMoC,QAAQ,GAAGpC,QAAQ,CAACE,eAAe;EACzC,OAAOT,SAAS,CAAC2C,QAAQ,EAAE,YAAY,CAAC;AAC1C;AAEA,OAAO,SAASC,gBAAgBA,CAACrC,QAAQ,EAAE;EACzC,IAAMsC,aAAa,GAAGtC,QAAQ,CAACE,eAAe;EAC9C,OAAOR,YAAY,CAAC4C,aAAa,EAAE,cAAc,CAAC;AACpD;AAEA,OAAO,SAASC,SAASA,CAACvC,QAAQ,EAAE;EAClC,IAAMoC,QAAQ,GAAGpC,QAAQ,CAACE,eAAe;EACzC,IAAMsC,MAAM,GAAG/C,SAAS,CAAC2C,QAAQ,EAAE,QAAQ,CAAC;EAC5C,OAAO1C,YAAY,CAAC8C,MAAM,EAAE,OAAO,CAAC;AACtC"}
1
+ {"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","getFirstElementChild","getTagName","getCellElements","document","worksheet","documentElement","sheetData","cells","row","cell","push","getMergedCellCoordinates","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValueElement","element","getCellInlineStringValue","firstElementChild","firstElementChildFirstElementChild","textContent","getDimensions","dimensions","getBaseStyles","styleSheet","cellStyleXfs","getCellStyles","cellXfs","getNumberFormats","numberFormats","numFmts","getSharedStrings","sst","string","t","value","r","getWorkbookProperties","workbook","getRelationships","relationships","getSheets","sheets"],"sources":["../../source/xml/xlsx.js"],"sourcesContent":["import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName } from './dom.js'\r\n\r\n// Returns an array of cells,\r\n// each element being an XML DOM element representing a cell.\r\nexport function getCellElements(document) {\r\n const worksheet = document.documentElement\r\n const sheetData = findChild(worksheet, 'sheetData')\r\n\r\n const cells = []\r\n forEach(sheetData, 'row', (row) => {\r\n forEach(row, 'c', (cell) => {\r\n cells.push(cell)\r\n })\r\n })\r\n return cells\r\n}\r\n\r\nexport function getMergedCellCoordinates(document) {\r\n const worksheet = document.documentElement\r\n const mergedCells = findChild(worksheet, 'mergeCells')\r\n const mergedCellsInfo = []\r\n if (mergedCells) {\r\n forEach(mergedCells, 'mergeCell', (mergedCell) => {\r\n mergedCellsInfo.push(mergedCell.getAttribute('ref'))\r\n })\r\n }\r\n return mergedCellsInfo\r\n}\r\n\r\nexport function getCellValueElement(document, element) {\r\n return findChild(element, 'v')\r\n}\r\n\r\nexport function getCellInlineStringValue(document, element) {\r\n // It seems as if in some weirdly-output \"*.xlsx\" files\r\n // there're non-element nodes of some weird nature.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/109\r\n // This code filters out such weird non-element nodes.\r\n const firstElementChild = getFirstElementChild(element)\r\n if (firstElementChild && getTagName(firstElementChild) === 'is') {\r\n const firstElementChildFirstElementChild = getFirstElementChild(firstElementChild)\r\n if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') {\r\n return firstElementChildFirstElementChild.textContent\r\n }\r\n }\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const worksheet = document.documentElement\r\n const dimensions = findChild(worksheet, 'dimension')\r\n if (dimensions) {\r\n return dimensions.getAttribute('ref')\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellStyleXfs = findChild(styleSheet, 'cellStyleXfs')\r\n if (cellStyleXfs) {\r\n return findChildren(cellStyleXfs, 'xf')\r\n }\r\n return []\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellXfs = findChild(styleSheet, 'cellXfs')\r\n if (!cellXfs) {\r\n return []\r\n }\r\n return findChildren(cellXfs, 'xf')\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n const styleSheet = document.documentElement\r\n let numberFormats = []\r\n const numFmts = findChild(styleSheet, 'numFmts')\r\n if (numFmts) {\r\n return findChildren(numFmts, 'numFmt')\r\n }\r\n return []\r\n}\r\n\r\nexport function getSharedStrings(document) {\r\n\t// An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` (\"rich formatting\") elements having `<t/>`.\r\n\t// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1\r\n\t// http://www.datypic.com/sc/ooxml/e-ssml_si-1.html\r\n\r\n const sst = document.documentElement\r\n return map(sst, 'si', string => {\r\n const t = findChild(string, 't')\r\n if (t) {\r\n return t.textContent\r\n }\r\n let value = ''\r\n forEach(string, 'r', (r) => {\r\n value += findChild(r, 't').textContent\r\n })\r\n return value\r\n })\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n const workbook = document.documentElement\r\n return findChild(workbook, 'workbookPr')\r\n}\r\n\r\nexport function getRelationships(document) {\r\n const relationships = document.documentElement\r\n return findChildren(relationships, 'Relationship')\r\n}\r\n\r\nexport function getSheets(document) {\r\n const workbook = document.documentElement\r\n const sheets = findChild(workbook, 'sheets')\r\n return findChildren(sheets, 'sheet')\r\n}"],"mappings":"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"}
@@ -18,17 +18,17 @@ var namespaces = {
18
18
  // This one seems to be for `<Relationships/>` file.
19
19
  rr: 'http://schemas.openxmlformats.org/package/2006/relationships'
20
20
  };
21
- export function getCells(document) {
21
+ export function getCellElements(document) {
22
22
  return xpath(document, null, '/a:worksheet/a:sheetData/a:row/a:c', namespaces);
23
23
  }
24
- export function getMergedCells(document) {
24
+ export function getMergedCellCoordinates(document) {
25
25
  return xpath(document, null, '/a:worksheet/a:mergedCells/a:mergedCell/@ref', namespaces);
26
26
  }
27
- export function getCellValue(document, node) {
28
- return xpath(document, node, './a:v', namespaces)[0];
27
+ export function getCellValue(document, element) {
28
+ return xpath(document, element, './a:v', namespaces)[0];
29
29
  }
30
- export function getCellInlineStringValue(document, node) {
31
- return xpath(document, node, './a:is/a:t', namespaces)[0].textContent;
30
+ export function getCellInlineStringValue(document, element) {
31
+ return xpath(document, element, './a:is/a:t', namespaces)[0].textContent;
32
32
  }
33
33
  export function getDimensions(document) {
34
34
  var dimensions = xpath(document, null, '/a:worksheet/a:dimension/@ref', namespaces)[0];
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx-xpath.js","names":["xpath","namespaces","a","r","rr","getCells","document","getMergedCells","getCellValue","node","getCellInlineStringValue","textContent","getDimensions","dimensions","getBaseStyles","getCellStyles","getNumberFormats","getSharedStrings","map","string","_","join","getWorkbookProperties","getRelationships","getSheets"],"sources":["../../../source/xml/xpath/xlsx-xpath.js"],"sourcesContent":["// This file is no longer used.\r\n\r\n// Turns out IE11 doesn't support XPath, so not using `./xpathBrowser` for browsers.\r\n// https://github.com/catamphetamine/read-excel-file/issues/26\r\n// The inclusion of `xpath` package in `./xpathNode`\r\n// increases the bundle size by about 100 kilobytes.\r\n// IE11 is a wide-spread browser and it's unlikely that\r\n// anyone would ignore it for now.\r\n// There could be a separate export `read-excel-file/ie11`\r\n// for using `./xpathNode` instead of `./xpathBrowser`\r\n// but this library has been migrated to not using `xpath` anyway.\r\n// This code is just alternative/historical now, it seems.\r\nimport xpath from './xpathNode'\r\n\r\nconst namespaces = {\r\n a: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n // This one seems to be for `r:id` attributes on `<sheet>`s.\r\n r: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n // This one seems to be for `<Relationships/>` file.\r\n rr: 'http://schemas.openxmlformats.org/package/2006/relationships'\r\n}\r\n\r\nexport function getCells(document) {\r\n return xpath(document, null, '/a:worksheet/a:sheetData/a:row/a:c', namespaces)\r\n}\r\n\r\nexport function getMergedCells(document) {\r\n return xpath(document, null, '/a:worksheet/a:mergedCells/a:mergedCell/@ref', namespaces)\r\n}\r\n\r\nexport function getCellValue(document, node) {\r\n return xpath(document, node, './a:v', namespaces)[0]\r\n}\r\n\r\nexport function getCellInlineStringValue(document, node) {\r\n return xpath(document, node, './a:is/a:t', namespaces)[0].textContent\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const dimensions = xpath(document, null, '/a:worksheet/a:dimension/@ref', namespaces)[0]\r\n if (dimensions) {\r\n return dimensions.textContent\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellStyleXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n return xpath(document, null, '/a:styleSheet/a:numFmts/a:numFmt', namespaces)\r\n}\r\n\r\nexport function getSharedStrings(document) {\r\n\t// An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` (\"rich formatting\") elements having `<t/>`.\r\n\t// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1\r\n\t// http://www.datypic.com/sc/ooxml/e-ssml_si-1.html\r\n\r\n  // The \".//a:t[not(ancestor::a:rPh)]\" selector means:\r\n  // \"select all `<t/>` that are not children of `<rPh/>`\". \r\n\t// https://stackoverflow.com/questions/42773772/xpath-span-what-does-the-dot-mean\r\n  // `<rPh><t></t></rPh>` seems to be some \"phonetic data\" added for languages like Japanese that should be ignored.\r\n  // https://github.com/doy/spreadsheet-parsexlsx/issues/72\r\n  return xpath(document, null, '/a:sst/a:si', namespaces)\r\n    .map(string => xpath(document, string, './/a:t[not(ancestor::a:rPh)]', namespaces)\r\n        .map(_ => _.textContent).join('')\r\n    )\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n return xpath(document, null, '/a:workbook/a:workbookPr', namespaces)[0]\r\n}\r\n\r\nexport function getRelationships(document) {\r\n return xpath(document, null, '/rr:Relationships/rr:Relationship', namespaces)\r\n}\r\n\r\nexport function getSheets(document) {\r\n return xpath(document, null, '/a:workbook/a:sheets/a:sheet', namespaces)\r\n}"],"mappings":"AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAK,MAAM,aAAa;AAE/B,IAAMC,UAAU,GAAG;EACjBC,CAAC,EAAE,2DAA2D;EAC9D;EACAC,CAAC,EAAE,qEAAqE;EACxE;EACAC,EAAE,EAAE;AACN,CAAC;AAED,OAAO,SAASC,QAAQA,CAACC,QAAQ,EAAE;EACjC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,oCAAoC,EAAEL,UAAU,CAAC;AAChF;AAEA,OAAO,SAASM,cAAcA,CAACD,QAAQ,EAAE;EACvC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8CAA8C,EAAEL,UAAU,CAAC;AAC1F;AAEA,OAAO,SAASO,YAAYA,CAACF,QAAQ,EAAEG,IAAI,EAAE;EAC3C,OAAOT,KAAK,CAACM,QAAQ,EAAEG,IAAI,EAAE,OAAO,EAAER,UAAU,CAAC,CAAC,CAAC,CAAC;AACtD;AAEA,OAAO,SAASS,wBAAwBA,CAACJ,QAAQ,EAAEG,IAAI,EAAE;EACvD,OAAOT,KAAK,CAACM,QAAQ,EAAEG,IAAI,EAAE,YAAY,EAAER,UAAU,CAAC,CAAC,CAAC,CAAC,CAACU,WAAW;AACvE;AAEA,OAAO,SAASC,aAAaA,CAACN,QAAQ,EAAE;EACtC,IAAMO,UAAU,GAAGb,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,+BAA+B,EAAEL,UAAU,CAAC,CAAC,CAAC,CAAC;EACxF,IAAIY,UAAU,EAAE;IACd,OAAOA,UAAU,CAACF,WAAW;EAC/B;AACF;AAEA,OAAO,SAASG,aAAaA,CAACR,QAAQ,EAAE;EACtC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAEL,UAAU,CAAC;AAC/E;AAEA,OAAO,SAASc,aAAaA,CAACT,QAAQ,EAAE;EACtC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAEL,UAAU,CAAC;AAC1E;AAEA,OAAO,SAASe,gBAAgBA,CAACV,QAAQ,EAAE;EACzC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,kCAAkC,EAAEL,UAAU,CAAC;AAC9E;AAEA,OAAO,SAASgB,gBAAgBA,CAACX,QAAQ,EAAE;EAC1C;EACA;EACA;;EAEC;EACA;EACD;EACC;EACA;EACA,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAEL,UAAU,CAAC,CACpDiB,GAAG,CAAC,UAAAC,MAAM;IAAA,OAAInB,KAAK,CAACM,QAAQ,EAAEa,MAAM,EAAE,8BAA8B,EAAElB,UAAU,CAAC,CAC7EiB,GAAG,CAAC,UAAAE,CAAC;MAAA,OAAIA,CAAC,CAACT,WAAW;IAAA,EAAC,CAACU,IAAI,CAAC,EAAE,CAAC;EAAA,CACrC,CAAC;AACL;AAEA,OAAO,SAASC,qBAAqBA,CAAChB,QAAQ,EAAE;EAC9C,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAEL,UAAU,CAAC,CAAC,CAAC,CAAC;AACzE;AAEA,OAAO,SAASsB,gBAAgBA,CAACjB,QAAQ,EAAE;EACzC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAEL,UAAU,CAAC;AAC/E;AAEA,OAAO,SAASuB,SAASA,CAAClB,QAAQ,EAAE;EAClC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAEL,UAAU,CAAC;AAC1E"}
1
+ {"version":3,"file":"xlsx-xpath.js","names":["xpath","namespaces","a","r","rr","getCellElements","document","getMergedCellCoordinates","getCellValue","element","getCellInlineStringValue","textContent","getDimensions","dimensions","getBaseStyles","getCellStyles","getNumberFormats","getSharedStrings","map","string","_","join","getWorkbookProperties","getRelationships","getSheets"],"sources":["../../../source/xml/xpath/xlsx-xpath.js"],"sourcesContent":["// This file is no longer used.\r\n\r\n// Turns out IE11 doesn't support XPath, so not using `./xpathBrowser` for browsers.\r\n// https://github.com/catamphetamine/read-excel-file/issues/26\r\n// The inclusion of `xpath` package in `./xpathNode`\r\n// increases the bundle size by about 100 kilobytes.\r\n// IE11 is a wide-spread browser and it's unlikely that\r\n// anyone would ignore it for now.\r\n// There could be a separate export `read-excel-file/ie11`\r\n// for using `./xpathNode` instead of `./xpathBrowser`\r\n// but this library has been migrated to not using `xpath` anyway.\r\n// This code is just alternative/historical now, it seems.\r\nimport xpath from './xpathNode'\r\n\r\nconst namespaces = {\r\n a: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n // This one seems to be for `r:id` attributes on `<sheet>`s.\r\n r: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n // This one seems to be for `<Relationships/>` file.\r\n rr: 'http://schemas.openxmlformats.org/package/2006/relationships'\r\n}\r\n\r\nexport function getCellElements(document) {\r\n return xpath(document, null, '/a:worksheet/a:sheetData/a:row/a:c', namespaces)\r\n}\r\n\r\nexport function getMergedCellCoordinates(document) {\r\n return xpath(document, null, '/a:worksheet/a:mergedCells/a:mergedCell/@ref', namespaces)\r\n}\r\n\r\nexport function getCellValue(document, element) {\r\n return xpath(document, element, './a:v', namespaces)[0]\r\n}\r\n\r\nexport function getCellInlineStringValue(document, element) {\r\n return xpath(document, element, './a:is/a:t', namespaces)[0].textContent\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const dimensions = xpath(document, null, '/a:worksheet/a:dimension/@ref', namespaces)[0]\r\n if (dimensions) {\r\n return dimensions.textContent\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellStyleXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n return xpath(document, null, '/a:styleSheet/a:numFmts/a:numFmt', namespaces)\r\n}\r\n\r\nexport function getSharedStrings(document) {\r\n\t// An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` (\"rich formatting\") elements having `<t/>`.\r\n\t// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1\r\n\t// http://www.datypic.com/sc/ooxml/e-ssml_si-1.html\r\n\r\n  // The \".//a:t[not(ancestor::a:rPh)]\" selector means:\r\n  // \"select all `<t/>` that are not children of `<rPh/>`\". \r\n\t// https://stackoverflow.com/questions/42773772/xpath-span-what-does-the-dot-mean\r\n  // `<rPh><t></t></rPh>` seems to be some \"phonetic data\" added for languages like Japanese that should be ignored.\r\n  // https://github.com/doy/spreadsheet-parsexlsx/issues/72\r\n  return xpath(document, null, '/a:sst/a:si', namespaces)\r\n    .map(string => xpath(document, string, './/a:t[not(ancestor::a:rPh)]', namespaces)\r\n        .map(_ => _.textContent).join('')\r\n    )\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n return xpath(document, null, '/a:workbook/a:workbookPr', namespaces)[0]\r\n}\r\n\r\nexport function getRelationships(document) {\r\n return xpath(document, null, '/rr:Relationships/rr:Relationship', namespaces)\r\n}\r\n\r\nexport function getSheets(document) {\r\n return xpath(document, null, '/a:workbook/a:sheets/a:sheet', namespaces)\r\n}"],"mappings":"AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAK,MAAM,aAAa;AAE/B,IAAMC,UAAU,GAAG;EACjBC,CAAC,EAAE,2DAA2D;EAC9D;EACAC,CAAC,EAAE,qEAAqE;EACxE;EACAC,EAAE,EAAE;AACN,CAAC;AAED,OAAO,SAASC,eAAeA,CAACC,QAAQ,EAAE;EACxC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,oCAAoC,EAAEL,UAAU,CAAC;AAChF;AAEA,OAAO,SAASM,wBAAwBA,CAACD,QAAQ,EAAE;EACjD,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8CAA8C,EAAEL,UAAU,CAAC;AAC1F;AAEA,OAAO,SAASO,YAAYA,CAACF,QAAQ,EAAEG,OAAO,EAAE;EAC9C,OAAOT,KAAK,CAACM,QAAQ,EAAEG,OAAO,EAAE,OAAO,EAAER,UAAU,CAAC,CAAC,CAAC,CAAC;AACzD;AAEA,OAAO,SAASS,wBAAwBA,CAACJ,QAAQ,EAAEG,OAAO,EAAE;EAC1D,OAAOT,KAAK,CAACM,QAAQ,EAAEG,OAAO,EAAE,YAAY,EAAER,UAAU,CAAC,CAAC,CAAC,CAAC,CAACU,WAAW;AAC1E;AAEA,OAAO,SAASC,aAAaA,CAACN,QAAQ,EAAE;EACtC,IAAMO,UAAU,GAAGb,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,+BAA+B,EAAEL,UAAU,CAAC,CAAC,CAAC,CAAC;EACxF,IAAIY,UAAU,EAAE;IACd,OAAOA,UAAU,CAACF,WAAW;EAC/B;AACF;AAEA,OAAO,SAASG,aAAaA,CAACR,QAAQ,EAAE;EACtC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAEL,UAAU,CAAC;AAC/E;AAEA,OAAO,SAASc,aAAaA,CAACT,QAAQ,EAAE;EACtC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAEL,UAAU,CAAC;AAC1E;AAEA,OAAO,SAASe,gBAAgBA,CAACV,QAAQ,EAAE;EACzC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,kCAAkC,EAAEL,UAAU,CAAC;AAC9E;AAEA,OAAO,SAASgB,gBAAgBA,CAACX,QAAQ,EAAE;EAC1C;EACA;EACA;;EAEC;EACA;EACD;EACC;EACA;EACA,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAEL,UAAU,CAAC,CACpDiB,GAAG,CAAC,UAAAC,MAAM;IAAA,OAAInB,KAAK,CAACM,QAAQ,EAAEa,MAAM,EAAE,8BAA8B,EAAElB,UAAU,CAAC,CAC7EiB,GAAG,CAAC,UAAAE,CAAC;MAAA,OAAIA,CAAC,CAACT,WAAW;IAAA,EAAC,CAACU,IAAI,CAAC,EAAE,CAAC;EAAA,CACrC,CAAC;AACL;AAEA,OAAO,SAASC,qBAAqBA,CAAChB,QAAQ,EAAE;EAC9C,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAEL,UAAU,CAAC,CAAC,CAAC,CAAC;AACzE;AAEA,OAAO,SAASsB,gBAAgBA,CAACjB,QAAQ,EAAE;EACzC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAEL,UAAU,CAAC;AAC/E;AAEA,OAAO,SAASuB,SAASA,CAAClB,QAAQ,EAAE;EAClC,OAAON,KAAK,CAACM,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAEL,UAAU,CAAC;AAC1E"}
@@ -10,17 +10,17 @@
10
10
  // for using `./xpathNode` instead of `./xpathBrowser`
11
11
  // but this library has been migrated to not using `xpath` anyway.
12
12
  // This code is just alternative/historical now, it seems.
13
- export default function xpath(document, node, path) {
13
+ export default function xpath(document, element, path) {
14
14
  var namespaces = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
15
- var nodes = document.evaluate(path, node || document, function (prefix) {
15
+ var elements = document.evaluate(path, element || document, function (prefix) {
16
16
  return namespaces[prefix];
17
17
  }, XPathResult.ANY_TYPE, null);
18
18
  // Convert iterator to an array.
19
19
  var results = [];
20
- var result = nodes.iterateNext();
20
+ var result = elements.iterateNext();
21
21
  while (result) {
22
22
  results.push(result);
23
- result = nodes.iterateNext();
23
+ result = elements.iterateNext();
24
24
  }
25
25
  return results;
26
26
  }