read-excel-file 5.2.22 → 5.2.26
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.
- package/CHANGELOG.md +6 -3
- package/bundle/read-excel-file.min.js +1 -1
- package/bundle/read-excel-file.min.js.map +1 -1
- package/commonjs/read/coordinates.js +4 -2
- package/commonjs/read/coordinates.js.map +1 -1
- package/commonjs/read/getData.js +14 -6
- package/commonjs/read/getData.js.map +1 -1
- package/commonjs/read/parseCellValue.js +29 -5
- package/commonjs/read/parseCellValue.js.map +1 -1
- package/commonjs/read/parseDimensions.js +2 -0
- package/commonjs/read/parseDimensions.js.map +1 -1
- package/commonjs/read/parseSheet.js +3 -1
- package/commonjs/read/parseSheet.js.map +1 -1
- package/modules/read/coordinates.js +3 -2
- package/modules/read/coordinates.js.map +1 -1
- package/modules/read/getData.js +14 -6
- package/modules/read/getData.js.map +1 -1
- package/modules/read/parseCellValue.js +29 -5
- package/modules/read/parseCellValue.js.map +1 -1
- package/modules/read/parseDimensions.js +3 -1
- package/modules/read/parseDimensions.js.map +1 -1
- package/modules/read/parseSheet.js +3 -1
- package/modules/read/parseSheet.js.map +1 -1
- package/package.json +1 -1
- package/web-worker/index.d.ts +17 -1
- package/web-worker/index.js +1 -1
|
@@ -30,7 +30,9 @@ function calculateDimensions(cells) {
|
|
|
30
30
|
row: maxRow,
|
|
31
31
|
column: maxCol
|
|
32
32
|
}];
|
|
33
|
-
}
|
|
33
|
+
} // Converts a letter coordinate to a digit coordinate.
|
|
34
|
+
// Examples: "A" -> 1, "B" -> 2, "Z" -> 26, "AA" -> 27, etc.
|
|
35
|
+
|
|
34
36
|
|
|
35
37
|
function columnLettersToNumber(columnLetters) {
|
|
36
38
|
// `for ... of ...` would require Babel polyfill for iterating a string.
|
|
@@ -47,7 +49,7 @@ function columnLettersToNumber(columnLetters) {
|
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
function parseCellCoordinates(coords) {
|
|
50
|
-
//
|
|
52
|
+
// Coordinate examples: "AA2091", "R988", "B1".
|
|
51
53
|
coords = coords.split(/(\d+)/);
|
|
52
54
|
return [// Row.
|
|
53
55
|
parseInt(coords[1]), // Column.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/coordinates.js"],"names":["LETTERS","calculateDimensions","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol","columnLettersToNumber","columnLetters","n","i","indexOf","parseCellCoordinates","coords","split","parseInt","trim"],"mappings":";;;;;;;AAAA;AACA,IAAMA,OAAO,GAAG,CAAC,EAAD,EAAK,GAAL,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB,EAAyB,GAAzB,EAA8B,GAA9B,EAAmC,GAAnC,EAAwC,GAAxC,EAA6C,GAA7C,EAAkD,GAAlD,EAAuD,GAAvD,EAA4D,GAA5D,EAAiE,GAAjE,EAAsE,GAAtE,EAA2E,GAA3E,EAAgF,GAAhF,EAAqF,GAArF,EAA0F,GAA1F,EAA+F,GAA/F,EAAoG,GAApG,EAAyG,GAAzG,EAA8G,GAA9G,EAAmH,GAAnH,EAAwH,GAAxH,EAA6H,GAA7H,EAAkI,GAAlI,CAAhB;;AAEO,SAASC,mBAAT,CAA8BC,KAA9B,EAAqC;AAC1C,MAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,CAAD,EAAIC,CAAJ;AAAA,WAAUD,CAAC,GAAGC,CAAd;AAAA,GAAnB;;AACA,MAAMC,OAAO,GAAGJ,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACC,GAAT;AAAA,GAAd,EAA4BC,IAA5B,CAAiCP,UAAjC,CAAhB;AACA,MAAMQ,OAAO,GAAGT,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACI,MAAT;AAAA,GAAd,EAA+BF,IAA/B,CAAoCP,UAApC,CAAhB;AACA,MAAMU,MAAM,GAAGP,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMQ,MAAM,GAAGR,OAAO,CAACA,OAAO,CAACS,MAAR,GAAiB,CAAlB,CAAtB;AACA,MAAMC,MAAM,GAAGL,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMM,MAAM,GAAGN,OAAO,CAACA,OAAO,CAACI,MAAR,GAAiB,CAAlB,CAAtB;AAEA,SAAO,CACL;AAAEN,IAAAA,GAAG,EAAEI,MAAP;AAAeD,IAAAA,MAAM,EAAEI;AAAvB,GADK,EAEL;AAAEP,IAAAA,GAAG,EAAEK,MAAP;AAAeF,IAAAA,MAAM,EAAEK;AAAvB,GAFK,CAAP;AAID
|
|
1
|
+
{"version":3,"sources":["../../source/read/coordinates.js"],"names":["LETTERS","calculateDimensions","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol","columnLettersToNumber","columnLetters","n","i","indexOf","parseCellCoordinates","coords","split","parseInt","trim"],"mappings":";;;;;;;AAAA;AACA,IAAMA,OAAO,GAAG,CAAC,EAAD,EAAK,GAAL,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB,EAAyB,GAAzB,EAA8B,GAA9B,EAAmC,GAAnC,EAAwC,GAAxC,EAA6C,GAA7C,EAAkD,GAAlD,EAAuD,GAAvD,EAA4D,GAA5D,EAAiE,GAAjE,EAAsE,GAAtE,EAA2E,GAA3E,EAAgF,GAAhF,EAAqF,GAArF,EAA0F,GAA1F,EAA+F,GAA/F,EAAoG,GAApG,EAAyG,GAAzG,EAA8G,GAA9G,EAAmH,GAAnH,EAAwH,GAAxH,EAA6H,GAA7H,EAAkI,GAAlI,CAAhB;;AAEO,SAASC,mBAAT,CAA8BC,KAA9B,EAAqC;AAC1C,MAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,CAAD,EAAIC,CAAJ;AAAA,WAAUD,CAAC,GAAGC,CAAd;AAAA,GAAnB;;AACA,MAAMC,OAAO,GAAGJ,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACC,GAAT;AAAA,GAAd,EAA4BC,IAA5B,CAAiCP,UAAjC,CAAhB;AACA,MAAMQ,OAAO,GAAGT,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACI,MAAT;AAAA,GAAd,EAA+BF,IAA/B,CAAoCP,UAApC,CAAhB;AACA,MAAMU,MAAM,GAAGP,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMQ,MAAM,GAAGR,OAAO,CAACA,OAAO,CAACS,MAAR,GAAiB,CAAlB,CAAtB;AACA,MAAMC,MAAM,GAAGL,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMM,MAAM,GAAGN,OAAO,CAACA,OAAO,CAACI,MAAR,GAAiB,CAAlB,CAAtB;AAEA,SAAO,CACL;AAAEN,IAAAA,GAAG,EAAEI,MAAP;AAAeD,IAAAA,MAAM,EAAEI;AAAvB,GADK,EAEL;AAAEP,IAAAA,GAAG,EAAEK,MAAP;AAAeF,IAAAA,MAAM,EAAEK;AAAvB,GAFK,CAAP;AAID,C,CAED;AACA;;;AACA,SAASC,qBAAT,CAA+BC,aAA/B,EAA8C;AAC5C;AACA,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,CAAC,GAAG,CAAR;;AACA,SAAOA,CAAC,GAAGF,aAAa,CAACJ,MAAzB,EAAiC;AAC/BK,IAAAA,CAAC,IAAI,EAAL;AACAA,IAAAA,CAAC,IAAIpB,OAAO,CAACsB,OAAR,CAAgBH,aAAa,CAACE,CAAD,CAA7B,CAAL;AACAA,IAAAA,CAAC;AACF;;AACD,SAAOD,CAAP;AACD;;AAEM,SAASG,oBAAT,CAA8BC,MAA9B,EAAsC;AAC3C;AACAA,EAAAA,MAAM,GAAGA,MAAM,CAACC,KAAP,CAAa,OAAb,CAAT;AACA,SAAO,CACL;AACAC,EAAAA,QAAQ,CAACF,MAAM,CAAC,CAAD,CAAP,CAFH,EAGL;AACAN,EAAAA,qBAAqB,CAACM,MAAM,CAAC,CAAD,CAAN,CAAUG,IAAV,EAAD,CAJhB,CAAP;AAMD","sourcesContent":["// Maps \"A1\"-like coordinates to `{ row, column }` numeric coordinates.\r\nconst LETTERS = [\"\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"]\r\n\r\nexport function calculateDimensions (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\r\n return [\r\n { row: minRow, column: minCol },\r\n { row: maxRow, column: maxCol }\r\n ]\r\n}\r\n\r\n// Converts a letter coordinate to a digit coordinate.\r\n// Examples: \"A\" -> 1, \"B\" -> 2, \"Z\" -> 26, \"AA\" -> 27, etc.\r\nfunction columnLettersToNumber(columnLetters) {\r\n // `for ... of ...` would require Babel polyfill for iterating a string.\r\n let n = 0\r\n let i = 0\r\n while (i < columnLetters.length) {\r\n n *= 26\r\n n += LETTERS.indexOf(columnLetters[i])\r\n i++\r\n }\r\n return n\r\n}\r\n\r\nexport function parseCellCoordinates(coords) {\r\n // Coordinate examples: \"AA2091\", \"R988\", \"B1\".\r\n coords = coords.split(/(\\d+)/)\r\n return [\r\n // Row.\r\n parseInt(coords[1]),\r\n // Column.\r\n columnLettersToNumber(coords[0].trim())\r\n ]\r\n}"],"file":"coordinates.js"}
|
package/commonjs/read/getData.js
CHANGED
|
@@ -35,10 +35,14 @@ function getData(sheet, options) {
|
|
|
35
35
|
|
|
36
36
|
var _dimensions = _slicedToArray(dimensions, 2),
|
|
37
37
|
leftTop = _dimensions[0],
|
|
38
|
-
rightBottom = _dimensions[1];
|
|
38
|
+
rightBottom = _dimensions[1]; // Don't discard empty rows or columns at the start.
|
|
39
|
+
// https://github.com/catamphetamine/read-excel-file/issues/102
|
|
40
|
+
// const colsCount = (rightBottom.column - leftTop.column) + 1
|
|
41
|
+
// const rowsCount = (rightBottom.row - leftTop.row) + 1
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
var
|
|
43
|
+
|
|
44
|
+
var colsCount = rightBottom.column;
|
|
45
|
+
var rowsCount = rightBottom.row; // Initialize spreadsheet data structure.
|
|
42
46
|
|
|
43
47
|
var data = new Array(rowsCount);
|
|
44
48
|
var i = 0;
|
|
@@ -61,9 +65,13 @@ function getData(sheet, options) {
|
|
|
61
65
|
|
|
62
66
|
for (var _iterator = _createForOfIteratorHelperLoose(cells), _step; !(_step = _iterator()).done;) {
|
|
63
67
|
var cell = _step.value;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
// Don't discard empty rows or columns at the start.
|
|
69
|
+
// https://github.com/catamphetamine/read-excel-file/issues/102
|
|
70
|
+
// const rowIndex = cell.row - leftTop.row
|
|
71
|
+
// const columnIndex = cell.column - leftTop.column
|
|
72
|
+
var rowIndex = cell.row - 1;
|
|
73
|
+
var columnIndex = cell.column - 1;
|
|
74
|
+
data[rowIndex][columnIndex] = cell.value;
|
|
67
75
|
} // Fill in the row map.
|
|
68
76
|
|
|
69
77
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/getData.js"],"names":["getData","sheet","options","dimensions","cells","length","leftTop","rightBottom","colsCount","column","rowsCount","row","data","Array","i","j","cell","value","rowMap","onlyTrimAtTheEnd","transformData"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;;;;;;;;;;;AAEe,SAASA,OAAT,CAAiBC,KAAjB,EAAwBC,OAAxB,EAAiC;AAC9C,MAAQC,UAAR,GAA8BF,KAA9B,CAAQE,UAAR;AAAA,MAAoBC,KAApB,GAA8BH,KAA9B,CAAoBG,KAApB,CAD8C,CAG9C;;AACA,MAAIA,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO,EAAP;AACD;;AAED,mCAA+BF,UAA/B;AAAA,MAAOG,OAAP;AAAA,MAAgBC,WAAhB
|
|
1
|
+
{"version":3,"sources":["../../source/read/getData.js"],"names":["getData","sheet","options","dimensions","cells","length","leftTop","rightBottom","colsCount","column","rowsCount","row","data","Array","i","j","cell","rowIndex","columnIndex","value","rowMap","onlyTrimAtTheEnd","transformData"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;;;;;;;;;;;AAEe,SAASA,OAAT,CAAiBC,KAAjB,EAAwBC,OAAxB,EAAiC;AAC9C,MAAQC,UAAR,GAA8BF,KAA9B,CAAQE,UAAR;AAAA,MAAoBC,KAApB,GAA8BH,KAA9B,CAAoBG,KAApB,CAD8C,CAG9C;;AACA,MAAIA,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO,EAAP;AACD;;AAED,mCAA+BF,UAA/B;AAAA,MAAOG,OAAP;AAAA,MAAgBC,WAAhB,kBAR8C,CAU9C;AACA;AACA;AACA;;;AAEA,MAAMC,SAAS,GAAGD,WAAW,CAACE,MAA9B;AACA,MAAMC,SAAS,GAAGH,WAAW,CAACI,GAA9B,CAhB8C,CAkB9C;;AACA,MAAIC,IAAI,GAAG,IAAIC,KAAJ,CAAUH,SAAV,CAAX;AACA,MAAII,CAAC,GAAG,CAAR;;AACA,SAAOA,CAAC,GAAGJ,SAAX,EAAsB;AACpBE,IAAAA,IAAI,CAACE,CAAD,CAAJ,GAAU,IAAID,KAAJ,CAAUL,SAAV,CAAV;AACA,QAAIO,CAAC,GAAG,CAAR;;AACA,WAAOA,CAAC,GAAGP,SAAX,EAAsB;AACpBI,MAAAA,IAAI,CAACE,CAAD,CAAJ,CAAQC,CAAR,IAAa,IAAb;AACAA,MAAAA,CAAC;AACF;;AACDD,IAAAA,CAAC;AACF,GA7B6C,CA+B9C;AACA;AACA;AACA;;;AACA,uDAAmBV,KAAnB,wCAA0B;AAAA,QAAfY,IAAe;AACxB;AACA;AACA;AACA;AACA,QAAMC,QAAQ,GAAGD,IAAI,CAACL,GAAL,GAAW,CAA5B;AACA,QAAMO,WAAW,GAAGF,IAAI,CAACP,MAAL,GAAc,CAAlC;AACAG,IAAAA,IAAI,CAACK,QAAD,CAAJ,CAAeC,WAAf,IAA8BF,IAAI,CAACG,KAAnC;AACD,GA3C6C,CA6C9C;;;AACA,MAAQC,MAAR,GAAmBlB,OAAnB,CAAQkB,MAAR;;AACA,MAAIA,MAAJ,EAAY;AACV,QAAIN,GAAC,GAAG,CAAR;;AACA,WAAOA,GAAC,GAAGF,IAAI,CAACP,MAAhB,EAAwB;AACtBe,MAAAA,MAAM,CAACN,GAAD,CAAN,GAAYA,GAAZ;AACAA,MAAAA,GAAC;AACF;AACF,GArD6C,CAuD9C;;;AACAF,EAAAA,IAAI,GAAG,+BACL,kCAAiBA,IAAjB,EAAuB;AAAES,IAAAA,gBAAgB,EAAE;AAApB,GAAvB,CADK,EAEL;AAAEA,IAAAA,gBAAgB,EAAE,IAApB;AAA0BD,IAAAA,MAAM,EAANA;AAA1B,GAFK,CAAP,CAxD8C,CA6D9C;;AACA,MAAIlB,OAAO,CAACoB,aAAZ,EAA2B;AACzBV,IAAAA,IAAI,GAAGV,OAAO,CAACoB,aAAR,CAAsBV,IAAtB,CAAP,CADyB,CAEzB;AACA;AACA;AACA;AACA;AACD;;AAED,SAAOA,IAAP;AACD","sourcesContent":["import dropEmptyRows from './dropEmptyRows'\r\nimport dropEmptyColumns from './dropEmptyColumns'\r\n\r\nexport default function getData(sheet, options) {\r\n const { dimensions, cells } = sheet\r\n\r\n // If the sheet is empty.\r\n if (cells.length === 0) {\r\n return []\r\n }\r\n\r\n const [leftTop, rightBottom] = dimensions\r\n\r\n // Don't discard empty rows or columns at the start.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const colsCount = (rightBottom.column - leftTop.column) + 1\r\n // const rowsCount = (rightBottom.row - leftTop.row) + 1\r\n\r\n const colsCount = rightBottom.column\r\n const rowsCount = rightBottom.row\r\n\r\n // Initialize spreadsheet data structure.\r\n let data = new Array(rowsCount)\r\n let i = 0\r\n while (i < rowsCount) {\r\n data[i] = new Array(colsCount)\r\n let j = 0\r\n while (j < colsCount) {\r\n data[i][j] = null\r\n j++\r\n }\r\n i++\r\n }\r\n\r\n // Fill in spreadsheet data structure.\r\n // (this code implies that `cells` aren't necessarily sorted by row and column:\r\n // maybe that's not correct, this piece code was initially copy-pasted\r\n // from some other library that used `XPath`)\r\n for (const cell of cells) {\r\n // Don't discard empty rows or columns at the start.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const rowIndex = cell.row - leftTop.row\r\n // const columnIndex = cell.column - leftTop.column\r\n const rowIndex = cell.row - 1\r\n const columnIndex = cell.column - 1\r\n data[rowIndex][columnIndex] = cell.value\r\n }\r\n\r\n // Fill in the row map.\r\n const { rowMap } = options\r\n if (rowMap) {\r\n let i = 0\r\n while (i < data.length) {\r\n rowMap[i] = i\r\n i++\r\n }\r\n }\r\n\r\n // Drop empty columns or rows.\r\n data = dropEmptyRows(\r\n dropEmptyColumns(data, { onlyTrimAtTheEnd: true }),\r\n { onlyTrimAtTheEnd: true, rowMap }\r\n )\r\n\r\n // Optionally transform data before applying `schema`.\r\n if (options.transformData) {\r\n data = options.transformData(data)\r\n // data = options.transformData(data, {\r\n // dropEmptyRowsAndColumns(data) {\r\n // return dropEmptyRows(dropEmptyColumns(data), { rowMap })\r\n // }\r\n // })\r\n }\r\n\r\n return data\r\n}"],"file":"getData.js"}
|
|
@@ -115,11 +115,13 @@ function getCellValue(value, type, _ref) {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
value = parseFloat(value); // XLSX does have "d" type for dates, but it's not commonly used.
|
|
118
|
-
//
|
|
119
|
-
//
|
|
118
|
+
// Instead, spreadsheets prefer using "n" type for dates for some reason.
|
|
119
|
+
//
|
|
120
|
+
// In such cases, sometimes a "date" type could be heuristically detected
|
|
121
|
+
// by looking at such numeric value "format" and seeing if it's a date-specific one.
|
|
120
122
|
// https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
|
|
121
123
|
//
|
|
122
|
-
//
|
|
124
|
+
// The list of generic numeric value "formats":
|
|
123
125
|
// https://xlsxwriter.readthedocs.io/format.html#format-set-num-format
|
|
124
126
|
//
|
|
125
127
|
|
|
@@ -189,16 +191,38 @@ function decodeError(errorCode) {
|
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
function isDateTemplate(template) {
|
|
194
|
+
// Date format tokens could be in upper case or in lower case.
|
|
195
|
+
// There seems to be no single standard.
|
|
196
|
+
// So lowercase the template first.
|
|
197
|
+
template = template.toLowerCase();
|
|
192
198
|
var tokens = template.split(/\W+/);
|
|
193
199
|
|
|
194
200
|
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
|
195
201
|
var token = _step.value;
|
|
196
202
|
|
|
197
|
-
if (
|
|
203
|
+
if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {
|
|
198
204
|
return false;
|
|
199
205
|
}
|
|
200
206
|
}
|
|
201
207
|
|
|
202
208
|
return true;
|
|
203
|
-
}
|
|
209
|
+
} // These tokens could be in upper case or in lower case.
|
|
210
|
+
// There seems to be no single standard, so using lower case.
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
var DATE_TEMPLATE_TOKENS = [// Seconds (min two digits). Example: "05".
|
|
214
|
+
'ss', // Minutes (min two digits). Example: "05". Could also be "Months". Weird.
|
|
215
|
+
'mm', // Hours. Example: "1".
|
|
216
|
+
'h', // Hours (min two digits). Example: "01".
|
|
217
|
+
'hh', // "AM" part of "AM/PM". Lowercased just in case.
|
|
218
|
+
'am', // "PM" part of "AM/PM". Lowercased just in case.
|
|
219
|
+
'pm', // Day. Example: "1"
|
|
220
|
+
'd', // Day (min two digits). Example: "01"
|
|
221
|
+
'dd', // Month (numeric). Example: "1".
|
|
222
|
+
'm', // Month (numeric, min two digits). Example: "01". Could also be "Minutes". Weird.
|
|
223
|
+
'mm', // Month (shortened month name). Example: "Jan".
|
|
224
|
+
'mmm', // Month (full month name). Example: "January".
|
|
225
|
+
'mmmm', // Two-digit year. Example: "20".
|
|
226
|
+
'yy', // Full year. Example: "2020".
|
|
227
|
+
'yyyy'];
|
|
204
228
|
//# sourceMappingURL=parseCellValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseCellValue.js"],"names":["BUILT_IN_DATE_NUMBER_FORMAT_IDS","getCellValue","value","type","getInlineStringValue","getStyleId","styles","values","properties","options","trim","undefined","Error","parseInt","decodeError","Date","parseFloat","styleId","style","indexOf","numberFormat","id","dateFormat","template","smartDateParser","isDateTemplate","TypeError","errorCode","tokens","split","token"],"mappings":"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","sourcesContent":["import parseDate from './parseDate'\r\n\r\n// https://hexdocs.pm/xlsxir/number_styles.html\r\nconst BUILT_IN_DATE_NUMBER_FORMAT_IDS = [14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]\r\n\r\nexport default function getCellValue(value, type, {\r\n\tgetInlineStringValue,\r\n\tgetStyleId,\r\n\tstyles,\r\n\tvalues,\r\n\tproperties,\r\n\toptions\r\n}) {\r\n if (!type) {\r\n // Default cell type is \"n\" (numeric).\r\n // http://www.datypic.com/sc/ooxml/t-ssml_CT_Cell.html\r\n type = 'n'\r\n }\r\n\r\n // Available Excel cell types:\r\n // https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\n //\r\n // Some other document (seems to be old):\r\n // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/ST_CellType.html\r\n //\r\n switch (type) {\r\n // If the cell contains formula string.\r\n case 'str':\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains an \"inline\" (not \"shared\") string.\r\n case 'inlineStr':\r\n value = getInlineStringValue()\r\n if (value === undefined) {\r\n throw new Error(`Unsupported \"inline string\" cell value structure`) // : ${cellNode.textContent}`)\r\n }\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains a \"shared\" string.\r\n // \"Shared\" strings is a way for an Excel editor to reduce\r\n // the file size by storing \"commonly used\" strings in a dictionary\r\n // and then referring to such strings by their index in that dictionary.\r\n case 's':\r\n // If a cell has no value then there's no `<c/>` element for it.\r\n // If a `<c/>` element exists then it's not empty.\r\n // The `<v/>`alue is a key in the \"shared strings\" dictionary of the\r\n // XLSX file, so look it up in the `values` dictionary by the numeric key.\r\n value = values[parseInt(value)]\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n case 'b':\r\n value = value === '1' ? true : false\r\n break\r\n\r\n // Stub: blank stub cell that is ignored by data processing utilities.\r\n case 'z':\r\n value = undefined\r\n break\r\n\r\n // Error: `value` is a numeric code.\r\n // They also wrote: \"and `w` property stores its common name\".\r\n // It's unclear what they meant by that.\r\n case 'e':\r\n value = decodeError(value)\r\n break\r\n\r\n // Date: a string to be parsed as a date.\r\n // (usually a string in \"ISO 8601\" format)\r\n case 'd':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = new Date(value)\r\n break\r\n\r\n case 'n':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = parseFloat(value)\r\n // XLSX does have \"d\" type for dates, but it's not commonly used.\r\n // specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n //\r\n // Format IDs:\r\n // https://xlsxwriter.readthedocs.io/format.html#format-set-num-format\r\n //\r\n const styleId = getStyleId()\r\n if (styleId) {\r\n // styleId = parseInt(styleId)\r\n const style = styles[styleId]\r\n if (!style) {\r\n throw new Error(`Cell style not found: ${styleId}`)\r\n }\r\n if (BUILT_IN_DATE_NUMBER_FORMAT_IDS.indexOf(parseInt(style.numberFormat.id)) >= 0 ||\r\n (options.dateFormat && style.numberFormat.template === options.dateFormat) ||\r\n (options.smartDateParser !== false && style.numberFormat.template && isDateTemplate(style.numberFormat.template))) {\r\n value = parseDate(value, properties)\r\n }\r\n }\r\n break\r\n\r\n default:\r\n throw new TypeError(`Cell type not supported: ${type}`)\r\n }\r\n\r\n // Convert empty values to `null`.\r\n if (value === undefined) {\r\n value = null\r\n }\r\n\r\n return value\r\n}\r\n\r\n// Decodes numeric error code to a string code.\r\n// https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\nfunction decodeError(errorCode) {\r\n // While the error values are determined by the application,\r\n // the following are some example error values that could be used:\r\n switch (errorCode) {\r\n case 0x00:\r\n return '#NULL!'\r\n case 0x07:\r\n return '#DIV/0!'\r\n case 0x0F:\r\n return '#VALUE!'\r\n case 0x17:\r\n return '#REF!'\r\n case 0x1D:\r\n return '#NAME?'\r\n case 0x24:\r\n return '#NUM!'\r\n case 0x2A:\r\n return '#N/A'\r\n case 0x2B:\r\n return '#GETTING_DATA'\r\n default:\r\n // Such error code doesn't exist. I made it up.\r\n return `#ERROR_${errorCode}`\r\n }\r\n}\r\n\r\nfunction isDateTemplate(template) {\r\n const tokens = template.split(/\\W+/)\r\n for (const token of tokens) {\r\n if (['MM', 'DD', 'YY', 'YYYY'].indexOf(token) < 0) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n"],"file":"parseCellValue.js"}
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseCellValue.js"],"names":["BUILT_IN_DATE_NUMBER_FORMAT_IDS","getCellValue","value","type","getInlineStringValue","getStyleId","styles","values","properties","options","trim","undefined","Error","parseInt","decodeError","Date","parseFloat","styleId","style","indexOf","numberFormat","id","dateFormat","template","smartDateParser","isDateTemplate","TypeError","errorCode","toLowerCase","tokens","split","token","DATE_TEMPLATE_TOKENS"],"mappings":"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","sourcesContent":["import parseDate from './parseDate'\r\n\r\n// https://hexdocs.pm/xlsxir/number_styles.html\r\nconst BUILT_IN_DATE_NUMBER_FORMAT_IDS = [14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]\r\n\r\nexport default function getCellValue(value, type, {\r\n\tgetInlineStringValue,\r\n\tgetStyleId,\r\n\tstyles,\r\n\tvalues,\r\n\tproperties,\r\n\toptions\r\n}) {\r\n if (!type) {\r\n // Default cell type is \"n\" (numeric).\r\n // http://www.datypic.com/sc/ooxml/t-ssml_CT_Cell.html\r\n type = 'n'\r\n }\r\n\r\n // Available Excel cell types:\r\n // https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\n //\r\n // Some other document (seems to be old):\r\n // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/ST_CellType.html\r\n //\r\n switch (type) {\r\n // If the cell contains formula string.\r\n case 'str':\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains an \"inline\" (not \"shared\") string.\r\n case 'inlineStr':\r\n value = getInlineStringValue()\r\n if (value === undefined) {\r\n throw new Error(`Unsupported \"inline string\" cell value structure`) // : ${cellNode.textContent}`)\r\n }\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains a \"shared\" string.\r\n // \"Shared\" strings is a way for an Excel editor to reduce\r\n // the file size by storing \"commonly used\" strings in a dictionary\r\n // and then referring to such strings by their index in that dictionary.\r\n case 's':\r\n // If a cell has no value then there's no `<c/>` element for it.\r\n // If a `<c/>` element exists then it's not empty.\r\n // The `<v/>`alue is a key in the \"shared strings\" dictionary of the\r\n // XLSX file, so look it up in the `values` dictionary by the numeric key.\r\n value = values[parseInt(value)]\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n case 'b':\r\n value = value === '1' ? true : false\r\n break\r\n\r\n // Stub: blank stub cell that is ignored by data processing utilities.\r\n case 'z':\r\n value = undefined\r\n break\r\n\r\n // Error: `value` is a numeric code.\r\n // They also wrote: \"and `w` property stores its common name\".\r\n // It's unclear what they meant by that.\r\n case 'e':\r\n value = decodeError(value)\r\n break\r\n\r\n // Date: a string to be parsed as a date.\r\n // (usually a string in \"ISO 8601\" format)\r\n case 'd':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = new Date(value)\r\n break\r\n\r\n case 'n':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = parseFloat(value)\r\n // XLSX does have \"d\" type for dates, but it's not commonly used.\r\n // Instead, spreadsheets prefer using \"n\" type for dates for some reason.\r\n //\r\n // In such cases, sometimes a \"date\" type could be heuristically detected\r\n // by looking at such numeric value \"format\" and seeing if it's a date-specific one.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n //\r\n // The list of generic numeric value \"formats\":\r\n // https://xlsxwriter.readthedocs.io/format.html#format-set-num-format\r\n //\r\n const styleId = getStyleId()\r\n if (styleId) {\r\n // styleId = parseInt(styleId)\r\n const style = styles[styleId]\r\n if (!style) {\r\n throw new Error(`Cell style not found: ${styleId}`)\r\n }\r\n if (BUILT_IN_DATE_NUMBER_FORMAT_IDS.indexOf(parseInt(style.numberFormat.id)) >= 0 ||\r\n (options.dateFormat && style.numberFormat.template === options.dateFormat) ||\r\n (options.smartDateParser !== false && style.numberFormat.template && isDateTemplate(style.numberFormat.template))) {\r\n value = parseDate(value, properties)\r\n }\r\n }\r\n break\r\n\r\n default:\r\n throw new TypeError(`Cell type not supported: ${type}`)\r\n }\r\n\r\n // Convert empty values to `null`.\r\n if (value === undefined) {\r\n value = null\r\n }\r\n\r\n return value\r\n}\r\n\r\n// Decodes numeric error code to a string code.\r\n// https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\nfunction decodeError(errorCode) {\r\n // While the error values are determined by the application,\r\n // the following are some example error values that could be used:\r\n switch (errorCode) {\r\n case 0x00:\r\n return '#NULL!'\r\n case 0x07:\r\n return '#DIV/0!'\r\n case 0x0F:\r\n return '#VALUE!'\r\n case 0x17:\r\n return '#REF!'\r\n case 0x1D:\r\n return '#NAME?'\r\n case 0x24:\r\n return '#NUM!'\r\n case 0x2A:\r\n return '#N/A'\r\n case 0x2B:\r\n return '#GETTING_DATA'\r\n default:\r\n // Such error code doesn't exist. I made it up.\r\n return `#ERROR_${errorCode}`\r\n }\r\n}\r\n\r\nfunction isDateTemplate(template) {\r\n // Date format tokens could be in upper case or in lower case.\r\n // There seems to be no single standard.\r\n // So lowercase the template first.\r\n template = template.toLowerCase()\r\n const tokens = template.split(/\\W+/)\r\n for (const token of tokens) {\r\n if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\n// These tokens could be in upper case or in lower case.\r\n// There seems to be no single standard, so using lower case.\r\nconst DATE_TEMPLATE_TOKENS = [\r\n // Seconds (min two digits). Example: \"05\".\r\n 'ss',\r\n // Minutes (min two digits). Example: \"05\". Could also be \"Months\". Weird.\r\n 'mm',\r\n // Hours. Example: \"1\".\r\n 'h',\r\n // Hours (min two digits). Example: \"01\".\r\n 'hh',\r\n // \"AM\" part of \"AM/PM\". Lowercased just in case.\r\n 'am',\r\n // \"PM\" part of \"AM/PM\". Lowercased just in case.\r\n 'pm',\r\n // Day. Example: \"1\"\r\n 'd',\r\n // Day (min two digits). Example: \"01\"\r\n 'dd',\r\n // Month (numeric). Example: \"1\".\r\n 'm',\r\n // Month (numeric, min two digits). Example: \"01\". Could also be \"Minutes\". Weird.\r\n 'mm',\r\n // Month (shortened month name). Example: \"Jan\".\r\n 'mmm',\r\n // Month (full month name). Example: \"January\".\r\n 'mmmm',\r\n // Two-digit year. Example: \"20\".\r\n 'yy',\r\n // Full year. Example: \"2020\".\r\n 'yyyy'\r\n];"],"file":"parseCellValue.js"}
|
|
@@ -21,6 +21,8 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
|
|
|
21
21
|
|
|
22
22
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
23
23
|
|
|
24
|
+
// `dimensions` defines the spreadsheet area containing all non-empty cells.
|
|
25
|
+
// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
|
|
24
26
|
function parseDimensions(sheet) {
|
|
25
27
|
var dimensions = (0, _xlsx.getDimensions)(sheet);
|
|
26
28
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseDimensions.js"],"names":["parseDimensions","sheet","dimensions","split","map","parseCellCoordinates","row","column","length"],"mappings":";;;;;;;AAAA;;AAIA;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseDimensions.js"],"names":["parseDimensions","sheet","dimensions","split","map","parseCellCoordinates","row","column","length"],"mappings":";;;;;;;AAAA;;AAIA;;;;;;;;;;;;;;AAIA;AACA;AACe,SAASA,eAAT,CAAyBC,KAAzB,EAAgC;AAC7C,MAAIC,UAAU,GAAG,yBAAcD,KAAd,CAAjB;;AACA,MAAIC,UAAJ,EAAgB;AACdA,IAAAA,UAAU,GAAGA,UAAU,CAACC,KAAX,CAAiB,GAAjB,EAAsBC,GAAtB,CAA0BC,iCAA1B,EAAgDD,GAAhD,CAAoD;AAAA;AAAA,UAAEE,GAAF;AAAA,UAAOC,MAAP;;AAAA,aAAoB;AACnFD,QAAAA,GAAG,EAAHA,GADmF;AAEnFC,QAAAA,MAAM,EAANA;AAFmF,OAApB;AAAA,KAApD,CAAb,CADc,CAKd;AACA;;AACA,QAAIL,UAAU,CAACM,MAAX,KAAsB,CAA1B,EAA6B;AAC3BN,MAAAA,UAAU,GAAG,CAACA,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAb;AACD;;AACD,WAAOA,UAAP;AACD;AACF","sourcesContent":["import {\r\n parseCellCoordinates\r\n} from './coordinates'\r\n\r\nimport {\r\n getDimensions\r\n} from '../xml/xlsx'\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 parseDimensions(sheet) {\r\n let dimensions = getDimensions(sheet)\r\n if (dimensions) {\r\n dimensions = dimensions.split(':').map(parseCellCoordinates).map(([row, column]) => ({\r\n row,\r\n column\r\n }))\r\n // When there's only a single cell on a sheet\r\n // there can sometimes be just \"A1\" for the dimensions string.\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\r\n"],"file":"parseDimensions.js"}
|
|
@@ -15,7 +15,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
15
15
|
|
|
16
16
|
function parseSheet(content, xml, values, styles, properties, options) {
|
|
17
17
|
var sheet = xml.createDocument(content);
|
|
18
|
-
var cells = (0, _parseCells["default"])(sheet, xml, values, styles, properties, options);
|
|
18
|
+
var cells = (0, _parseCells["default"])(sheet, xml, values, styles, properties, options); // `dimensions` defines the spreadsheet area containing all non-empty cells.
|
|
19
|
+
// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
|
|
20
|
+
|
|
19
21
|
var dimensions = (0, _parseDimensions["default"])(sheet) || (0, _coordinates.calculateDimensions)(cells);
|
|
20
22
|
return {
|
|
21
23
|
cells: cells,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseSheet.js"],"names":["parseSheet","content","xml","values","styles","properties","options","sheet","createDocument","cells","dimensions"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;AAEe,SAASA,UAAT,CAAoBC,OAApB,EAA6BC,GAA7B,EAAkCC,MAAlC,EAA0CC,MAA1C,EAAkDC,UAAlD,EAA8DC,OAA9D,EAAuE;AACpF,MAAMC,KAAK,GAAGL,GAAG,CAACM,cAAJ,CAAmBP,OAAnB,CAAd;AAEA,MAAMQ,KAAK,GAAG,4BAAWF,KAAX,EAAkBL,GAAlB,EAAuBC,MAAvB,EAA+BC,MAA/B,EAAuCC,UAAvC,EAAmDC,OAAnD,CAAd;AACA,MAAMI,UAAU,GAAG,iCAAgBH,KAAhB,KAA0B,sCAAoBE,KAApB,CAA7C;AAEA,SAAO;AAAEA,IAAAA,KAAK,EAALA,KAAF;AAASC,IAAAA,UAAU,EAAVA;AAAT,GAAP;AACD","sourcesContent":["import parseCells from './parseCells'\r\nimport parseDimensions from './parseDimensions'\r\n\r\nimport { calculateDimensions } from './coordinates'\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 const dimensions = parseDimensions(sheet) || calculateDimensions(cells)\r\n\r\n return { cells, dimensions }\r\n}"],"file":"parseSheet.js"}
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseSheet.js"],"names":["parseSheet","content","xml","values","styles","properties","options","sheet","createDocument","cells","dimensions"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;AAEe,SAASA,UAAT,CAAoBC,OAApB,EAA6BC,GAA7B,EAAkCC,MAAlC,EAA0CC,MAA1C,EAAkDC,UAAlD,EAA8DC,OAA9D,EAAuE;AACpF,MAAMC,KAAK,GAAGL,GAAG,CAACM,cAAJ,CAAmBP,OAAnB,CAAd;AAEA,MAAMQ,KAAK,GAAG,4BAAWF,KAAX,EAAkBL,GAAlB,EAAuBC,MAAvB,EAA+BC,MAA/B,EAAuCC,UAAvC,EAAmDC,OAAnD,CAAd,CAHoF,CAKpF;AACA;;AACA,MAAMI,UAAU,GAAG,iCAAgBH,KAAhB,KAA0B,sCAAoBE,KAApB,CAA7C;AAEA,SAAO;AAAEA,IAAAA,KAAK,EAALA,KAAF;AAASC,IAAAA,UAAU,EAAVA;AAAT,GAAP;AACD","sourcesContent":["import parseCells from './parseCells'\r\nimport parseDimensions from './parseDimensions'\r\n\r\nimport { calculateDimensions } from './coordinates'\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}"],"file":"parseSheet.js"}
|
|
@@ -22,7 +22,8 @@ export function calculateDimensions(cells) {
|
|
|
22
22
|
row: maxRow,
|
|
23
23
|
column: maxCol
|
|
24
24
|
}];
|
|
25
|
-
}
|
|
25
|
+
} // Converts a letter coordinate to a digit coordinate.
|
|
26
|
+
// Examples: "A" -> 1, "B" -> 2, "Z" -> 26, "AA" -> 27, etc.
|
|
26
27
|
|
|
27
28
|
function columnLettersToNumber(columnLetters) {
|
|
28
29
|
// `for ... of ...` would require Babel polyfill for iterating a string.
|
|
@@ -39,7 +40,7 @@ function columnLettersToNumber(columnLetters) {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export function parseCellCoordinates(coords) {
|
|
42
|
-
//
|
|
43
|
+
// Coordinate examples: "AA2091", "R988", "B1".
|
|
43
44
|
coords = coords.split(/(\d+)/);
|
|
44
45
|
return [// Row.
|
|
45
46
|
parseInt(coords[1]), // Column.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/coordinates.js"],"names":["LETTERS","calculateDimensions","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol","columnLettersToNumber","columnLetters","n","i","indexOf","parseCellCoordinates","coords","split","parseInt","trim"],"mappings":"AAAA;AACA,IAAMA,OAAO,GAAG,CAAC,EAAD,EAAK,GAAL,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB,EAAyB,GAAzB,EAA8B,GAA9B,EAAmC,GAAnC,EAAwC,GAAxC,EAA6C,GAA7C,EAAkD,GAAlD,EAAuD,GAAvD,EAA4D,GAA5D,EAAiE,GAAjE,EAAsE,GAAtE,EAA2E,GAA3E,EAAgF,GAAhF,EAAqF,GAArF,EAA0F,GAA1F,EAA+F,GAA/F,EAAoG,GAApG,EAAyG,GAAzG,EAA8G,GAA9G,EAAmH,GAAnH,EAAwH,GAAxH,EAA6H,GAA7H,EAAkI,GAAlI,CAAhB;AAEA,OAAO,SAASC,mBAAT,CAA8BC,KAA9B,EAAqC;AAC1C,MAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,CAAD,EAAIC,CAAJ;AAAA,WAAUD,CAAC,GAAGC,CAAd;AAAA,GAAnB;;AACA,MAAMC,OAAO,GAAGJ,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACC,GAAT;AAAA,GAAd,EAA4BC,IAA5B,CAAiCP,UAAjC,CAAhB;AACA,MAAMQ,OAAO,GAAGT,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACI,MAAT;AAAA,GAAd,EAA+BF,IAA/B,CAAoCP,UAApC,CAAhB;AACA,MAAMU,MAAM,GAAGP,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMQ,MAAM,GAAGR,OAAO,CAACA,OAAO,CAACS,MAAR,GAAiB,CAAlB,CAAtB;AACA,MAAMC,MAAM,GAAGL,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMM,MAAM,GAAGN,OAAO,CAACA,OAAO,CAACI,MAAR,GAAiB,CAAlB,CAAtB;AAEA,SAAO,CACL;AAAEN,IAAAA,GAAG,EAAEI,MAAP;AAAeD,IAAAA,MAAM,EAAEI;AAAvB,GADK,EAEL;AAAEP,IAAAA,GAAG,EAAEK,MAAP;AAAeF,IAAAA,MAAM,EAAEK;AAAvB,GAFK,CAAP;AAID;;
|
|
1
|
+
{"version":3,"sources":["../../source/read/coordinates.js"],"names":["LETTERS","calculateDimensions","cells","comparator","a","b","allRows","map","cell","row","sort","allCols","column","minRow","maxRow","length","minCol","maxCol","columnLettersToNumber","columnLetters","n","i","indexOf","parseCellCoordinates","coords","split","parseInt","trim"],"mappings":"AAAA;AACA,IAAMA,OAAO,GAAG,CAAC,EAAD,EAAK,GAAL,EAAU,GAAV,EAAe,GAAf,EAAoB,GAApB,EAAyB,GAAzB,EAA8B,GAA9B,EAAmC,GAAnC,EAAwC,GAAxC,EAA6C,GAA7C,EAAkD,GAAlD,EAAuD,GAAvD,EAA4D,GAA5D,EAAiE,GAAjE,EAAsE,GAAtE,EAA2E,GAA3E,EAAgF,GAAhF,EAAqF,GAArF,EAA0F,GAA1F,EAA+F,GAA/F,EAAoG,GAApG,EAAyG,GAAzG,EAA8G,GAA9G,EAAmH,GAAnH,EAAwH,GAAxH,EAA6H,GAA7H,EAAkI,GAAlI,CAAhB;AAEA,OAAO,SAASC,mBAAT,CAA8BC,KAA9B,EAAqC;AAC1C,MAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,CAAD,EAAIC,CAAJ;AAAA,WAAUD,CAAC,GAAGC,CAAd;AAAA,GAAnB;;AACA,MAAMC,OAAO,GAAGJ,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACC,GAAT;AAAA,GAAd,EAA4BC,IAA5B,CAAiCP,UAAjC,CAAhB;AACA,MAAMQ,OAAO,GAAGT,KAAK,CAACK,GAAN,CAAU,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACI,MAAT;AAAA,GAAd,EAA+BF,IAA/B,CAAoCP,UAApC,CAAhB;AACA,MAAMU,MAAM,GAAGP,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMQ,MAAM,GAAGR,OAAO,CAACA,OAAO,CAACS,MAAR,GAAiB,CAAlB,CAAtB;AACA,MAAMC,MAAM,GAAGL,OAAO,CAAC,CAAD,CAAtB;AACA,MAAMM,MAAM,GAAGN,OAAO,CAACA,OAAO,CAACI,MAAR,GAAiB,CAAlB,CAAtB;AAEA,SAAO,CACL;AAAEN,IAAAA,GAAG,EAAEI,MAAP;AAAeD,IAAAA,MAAM,EAAEI;AAAvB,GADK,EAEL;AAAEP,IAAAA,GAAG,EAAEK,MAAP;AAAeF,IAAAA,MAAM,EAAEK;AAAvB,GAFK,CAAP;AAID,C,CAED;AACA;;AACA,SAASC,qBAAT,CAA+BC,aAA/B,EAA8C;AAC5C;AACA,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,CAAC,GAAG,CAAR;;AACA,SAAOA,CAAC,GAAGF,aAAa,CAACJ,MAAzB,EAAiC;AAC/BK,IAAAA,CAAC,IAAI,EAAL;AACAA,IAAAA,CAAC,IAAIpB,OAAO,CAACsB,OAAR,CAAgBH,aAAa,CAACE,CAAD,CAA7B,CAAL;AACAA,IAAAA,CAAC;AACF;;AACD,SAAOD,CAAP;AACD;;AAED,OAAO,SAASG,oBAAT,CAA8BC,MAA9B,EAAsC;AAC3C;AACAA,EAAAA,MAAM,GAAGA,MAAM,CAACC,KAAP,CAAa,OAAb,CAAT;AACA,SAAO,CACL;AACAC,EAAAA,QAAQ,CAACF,MAAM,CAAC,CAAD,CAAP,CAFH,EAGL;AACAN,EAAAA,qBAAqB,CAACM,MAAM,CAAC,CAAD,CAAN,CAAUG,IAAV,EAAD,CAJhB,CAAP;AAMD","sourcesContent":["// Maps \"A1\"-like coordinates to `{ row, column }` numeric coordinates.\r\nconst LETTERS = [\"\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"]\r\n\r\nexport function calculateDimensions (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\r\n return [\r\n { row: minRow, column: minCol },\r\n { row: maxRow, column: maxCol }\r\n ]\r\n}\r\n\r\n// Converts a letter coordinate to a digit coordinate.\r\n// Examples: \"A\" -> 1, \"B\" -> 2, \"Z\" -> 26, \"AA\" -> 27, etc.\r\nfunction columnLettersToNumber(columnLetters) {\r\n // `for ... of ...` would require Babel polyfill for iterating a string.\r\n let n = 0\r\n let i = 0\r\n while (i < columnLetters.length) {\r\n n *= 26\r\n n += LETTERS.indexOf(columnLetters[i])\r\n i++\r\n }\r\n return n\r\n}\r\n\r\nexport function parseCellCoordinates(coords) {\r\n // Coordinate examples: \"AA2091\", \"R988\", \"B1\".\r\n coords = coords.split(/(\\d+)/)\r\n return [\r\n // Row.\r\n parseInt(coords[1]),\r\n // Column.\r\n columnLettersToNumber(coords[0].trim())\r\n ]\r\n}"],"file":"coordinates.js"}
|
package/modules/read/getData.js
CHANGED
|
@@ -24,10 +24,14 @@ export default function getData(sheet, options) {
|
|
|
24
24
|
|
|
25
25
|
var _dimensions = _slicedToArray(dimensions, 2),
|
|
26
26
|
leftTop = _dimensions[0],
|
|
27
|
-
rightBottom = _dimensions[1];
|
|
27
|
+
rightBottom = _dimensions[1]; // Don't discard empty rows or columns at the start.
|
|
28
|
+
// https://github.com/catamphetamine/read-excel-file/issues/102
|
|
29
|
+
// const colsCount = (rightBottom.column - leftTop.column) + 1
|
|
30
|
+
// const rowsCount = (rightBottom.row - leftTop.row) + 1
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
var
|
|
32
|
+
|
|
33
|
+
var colsCount = rightBottom.column;
|
|
34
|
+
var rowsCount = rightBottom.row; // Initialize spreadsheet data structure.
|
|
31
35
|
|
|
32
36
|
var data = new Array(rowsCount);
|
|
33
37
|
var i = 0;
|
|
@@ -50,9 +54,13 @@ export default function getData(sheet, options) {
|
|
|
50
54
|
|
|
51
55
|
for (var _iterator = _createForOfIteratorHelperLoose(cells), _step; !(_step = _iterator()).done;) {
|
|
52
56
|
var cell = _step.value;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
// Don't discard empty rows or columns at the start.
|
|
58
|
+
// https://github.com/catamphetamine/read-excel-file/issues/102
|
|
59
|
+
// const rowIndex = cell.row - leftTop.row
|
|
60
|
+
// const columnIndex = cell.column - leftTop.column
|
|
61
|
+
var rowIndex = cell.row - 1;
|
|
62
|
+
var columnIndex = cell.column - 1;
|
|
63
|
+
data[rowIndex][columnIndex] = cell.value;
|
|
56
64
|
} // Fill in the row map.
|
|
57
65
|
|
|
58
66
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/getData.js"],"names":["dropEmptyRows","dropEmptyColumns","getData","sheet","options","dimensions","cells","length","leftTop","rightBottom","colsCount","column","rowsCount","row","data","Array","i","j","cell","value","rowMap","onlyTrimAtTheEnd","transformData"],"mappings":";;;;;;;;;;;;;;AAAA,OAAOA,aAAP,MAA0B,iBAA1B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AAEA,eAAe,SAASC,OAAT,CAAiBC,KAAjB,EAAwBC,OAAxB,EAAiC;AAC9C,MAAQC,UAAR,GAA8BF,KAA9B,CAAQE,UAAR;AAAA,MAAoBC,KAApB,GAA8BH,KAA9B,CAAoBG,KAApB,CAD8C,CAG9C;;AACA,MAAIA,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO,EAAP;AACD;;AAED,mCAA+BF,UAA/B;AAAA,MAAOG,OAAP;AAAA,MAAgBC,WAAhB
|
|
1
|
+
{"version":3,"sources":["../../source/read/getData.js"],"names":["dropEmptyRows","dropEmptyColumns","getData","sheet","options","dimensions","cells","length","leftTop","rightBottom","colsCount","column","rowsCount","row","data","Array","i","j","cell","rowIndex","columnIndex","value","rowMap","onlyTrimAtTheEnd","transformData"],"mappings":";;;;;;;;;;;;;;AAAA,OAAOA,aAAP,MAA0B,iBAA1B;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AAEA,eAAe,SAASC,OAAT,CAAiBC,KAAjB,EAAwBC,OAAxB,EAAiC;AAC9C,MAAQC,UAAR,GAA8BF,KAA9B,CAAQE,UAAR;AAAA,MAAoBC,KAApB,GAA8BH,KAA9B,CAAoBG,KAApB,CAD8C,CAG9C;;AACA,MAAIA,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO,EAAP;AACD;;AAED,mCAA+BF,UAA/B;AAAA,MAAOG,OAAP;AAAA,MAAgBC,WAAhB,kBAR8C,CAU9C;AACA;AACA;AACA;;;AAEA,MAAMC,SAAS,GAAGD,WAAW,CAACE,MAA9B;AACA,MAAMC,SAAS,GAAGH,WAAW,CAACI,GAA9B,CAhB8C,CAkB9C;;AACA,MAAIC,IAAI,GAAG,IAAIC,KAAJ,CAAUH,SAAV,CAAX;AACA,MAAII,CAAC,GAAG,CAAR;;AACA,SAAOA,CAAC,GAAGJ,SAAX,EAAsB;AACpBE,IAAAA,IAAI,CAACE,CAAD,CAAJ,GAAU,IAAID,KAAJ,CAAUL,SAAV,CAAV;AACA,QAAIO,CAAC,GAAG,CAAR;;AACA,WAAOA,CAAC,GAAGP,SAAX,EAAsB;AACpBI,MAAAA,IAAI,CAACE,CAAD,CAAJ,CAAQC,CAAR,IAAa,IAAb;AACAA,MAAAA,CAAC;AACF;;AACDD,IAAAA,CAAC;AACF,GA7B6C,CA+B9C;AACA;AACA;AACA;;;AACA,uDAAmBV,KAAnB,wCAA0B;AAAA,QAAfY,IAAe;AACxB;AACA;AACA;AACA;AACA,QAAMC,QAAQ,GAAGD,IAAI,CAACL,GAAL,GAAW,CAA5B;AACA,QAAMO,WAAW,GAAGF,IAAI,CAACP,MAAL,GAAc,CAAlC;AACAG,IAAAA,IAAI,CAACK,QAAD,CAAJ,CAAeC,WAAf,IAA8BF,IAAI,CAACG,KAAnC;AACD,GA3C6C,CA6C9C;;;AACA,MAAQC,MAAR,GAAmBlB,OAAnB,CAAQkB,MAAR;;AACA,MAAIA,MAAJ,EAAY;AACV,QAAIN,GAAC,GAAG,CAAR;;AACA,WAAOA,GAAC,GAAGF,IAAI,CAACP,MAAhB,EAAwB;AACtBe,MAAAA,MAAM,CAACN,GAAD,CAAN,GAAYA,GAAZ;AACAA,MAAAA,GAAC;AACF;AACF,GArD6C,CAuD9C;;;AACAF,EAAAA,IAAI,GAAGd,aAAa,CAClBC,gBAAgB,CAACa,IAAD,EAAO;AAAES,IAAAA,gBAAgB,EAAE;AAApB,GAAP,CADE,EAElB;AAAEA,IAAAA,gBAAgB,EAAE,IAApB;AAA0BD,IAAAA,MAAM,EAANA;AAA1B,GAFkB,CAApB,CAxD8C,CA6D9C;;AACA,MAAIlB,OAAO,CAACoB,aAAZ,EAA2B;AACzBV,IAAAA,IAAI,GAAGV,OAAO,CAACoB,aAAR,CAAsBV,IAAtB,CAAP,CADyB,CAEzB;AACA;AACA;AACA;AACA;AACD;;AAED,SAAOA,IAAP;AACD","sourcesContent":["import dropEmptyRows from './dropEmptyRows'\r\nimport dropEmptyColumns from './dropEmptyColumns'\r\n\r\nexport default function getData(sheet, options) {\r\n const { dimensions, cells } = sheet\r\n\r\n // If the sheet is empty.\r\n if (cells.length === 0) {\r\n return []\r\n }\r\n\r\n const [leftTop, rightBottom] = dimensions\r\n\r\n // Don't discard empty rows or columns at the start.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const colsCount = (rightBottom.column - leftTop.column) + 1\r\n // const rowsCount = (rightBottom.row - leftTop.row) + 1\r\n\r\n const colsCount = rightBottom.column\r\n const rowsCount = rightBottom.row\r\n\r\n // Initialize spreadsheet data structure.\r\n let data = new Array(rowsCount)\r\n let i = 0\r\n while (i < rowsCount) {\r\n data[i] = new Array(colsCount)\r\n let j = 0\r\n while (j < colsCount) {\r\n data[i][j] = null\r\n j++\r\n }\r\n i++\r\n }\r\n\r\n // Fill in spreadsheet data structure.\r\n // (this code implies that `cells` aren't necessarily sorted by row and column:\r\n // maybe that's not correct, this piece code was initially copy-pasted\r\n // from some other library that used `XPath`)\r\n for (const cell of cells) {\r\n // Don't discard empty rows or columns at the start.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const rowIndex = cell.row - leftTop.row\r\n // const columnIndex = cell.column - leftTop.column\r\n const rowIndex = cell.row - 1\r\n const columnIndex = cell.column - 1\r\n data[rowIndex][columnIndex] = cell.value\r\n }\r\n\r\n // Fill in the row map.\r\n const { rowMap } = options\r\n if (rowMap) {\r\n let i = 0\r\n while (i < data.length) {\r\n rowMap[i] = i\r\n i++\r\n }\r\n }\r\n\r\n // Drop empty columns or rows.\r\n data = dropEmptyRows(\r\n dropEmptyColumns(data, { onlyTrimAtTheEnd: true }),\r\n { onlyTrimAtTheEnd: true, rowMap }\r\n )\r\n\r\n // Optionally transform data before applying `schema`.\r\n if (options.transformData) {\r\n data = options.transformData(data)\r\n // data = options.transformData(data, {\r\n // dropEmptyRowsAndColumns(data) {\r\n // return dropEmptyRows(dropEmptyColumns(data), { rowMap })\r\n // }\r\n // })\r\n }\r\n\r\n return data\r\n}"],"file":"getData.js"}
|
|
@@ -104,11 +104,13 @@ export default function getCellValue(value, type, _ref) {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
value = parseFloat(value); // XLSX does have "d" type for dates, but it's not commonly used.
|
|
107
|
-
//
|
|
108
|
-
//
|
|
107
|
+
// Instead, spreadsheets prefer using "n" type for dates for some reason.
|
|
108
|
+
//
|
|
109
|
+
// In such cases, sometimes a "date" type could be heuristically detected
|
|
110
|
+
// by looking at such numeric value "format" and seeing if it's a date-specific one.
|
|
109
111
|
// https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
|
|
110
112
|
//
|
|
111
|
-
//
|
|
113
|
+
// The list of generic numeric value "formats":
|
|
112
114
|
// https://xlsxwriter.readthedocs.io/format.html#format-set-num-format
|
|
113
115
|
//
|
|
114
116
|
|
|
@@ -177,16 +179,38 @@ function decodeError(errorCode) {
|
|
|
177
179
|
}
|
|
178
180
|
|
|
179
181
|
function isDateTemplate(template) {
|
|
182
|
+
// Date format tokens could be in upper case or in lower case.
|
|
183
|
+
// There seems to be no single standard.
|
|
184
|
+
// So lowercase the template first.
|
|
185
|
+
template = template.toLowerCase();
|
|
180
186
|
var tokens = template.split(/\W+/);
|
|
181
187
|
|
|
182
188
|
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
|
183
189
|
var token = _step.value;
|
|
184
190
|
|
|
185
|
-
if (
|
|
191
|
+
if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {
|
|
186
192
|
return false;
|
|
187
193
|
}
|
|
188
194
|
}
|
|
189
195
|
|
|
190
196
|
return true;
|
|
191
|
-
}
|
|
197
|
+
} // These tokens could be in upper case or in lower case.
|
|
198
|
+
// There seems to be no single standard, so using lower case.
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
var DATE_TEMPLATE_TOKENS = [// Seconds (min two digits). Example: "05".
|
|
202
|
+
'ss', // Minutes (min two digits). Example: "05". Could also be "Months". Weird.
|
|
203
|
+
'mm', // Hours. Example: "1".
|
|
204
|
+
'h', // Hours (min two digits). Example: "01".
|
|
205
|
+
'hh', // "AM" part of "AM/PM". Lowercased just in case.
|
|
206
|
+
'am', // "PM" part of "AM/PM". Lowercased just in case.
|
|
207
|
+
'pm', // Day. Example: "1"
|
|
208
|
+
'd', // Day (min two digits). Example: "01"
|
|
209
|
+
'dd', // Month (numeric). Example: "1".
|
|
210
|
+
'm', // Month (numeric, min two digits). Example: "01". Could also be "Minutes". Weird.
|
|
211
|
+
'mm', // Month (shortened month name). Example: "Jan".
|
|
212
|
+
'mmm', // Month (full month name). Example: "January".
|
|
213
|
+
'mmmm', // Two-digit year. Example: "20".
|
|
214
|
+
'yy', // Full year. Example: "2020".
|
|
215
|
+
'yyyy'];
|
|
192
216
|
//# sourceMappingURL=parseCellValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseCellValue.js"],"names":["parseDate","BUILT_IN_DATE_NUMBER_FORMAT_IDS","getCellValue","value","type","getInlineStringValue","getStyleId","styles","values","properties","options","trim","undefined","Error","parseInt","decodeError","Date","parseFloat","styleId","style","indexOf","numberFormat","id","dateFormat","template","smartDateParser","isDateTemplate","TypeError","errorCode","tokens","split","token"],"mappings":"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","sourcesContent":["import parseDate from './parseDate'\r\n\r\n// https://hexdocs.pm/xlsxir/number_styles.html\r\nconst BUILT_IN_DATE_NUMBER_FORMAT_IDS = [14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]\r\n\r\nexport default function getCellValue(value, type, {\r\n\tgetInlineStringValue,\r\n\tgetStyleId,\r\n\tstyles,\r\n\tvalues,\r\n\tproperties,\r\n\toptions\r\n}) {\r\n if (!type) {\r\n // Default cell type is \"n\" (numeric).\r\n // http://www.datypic.com/sc/ooxml/t-ssml_CT_Cell.html\r\n type = 'n'\r\n }\r\n\r\n // Available Excel cell types:\r\n // https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\n //\r\n // Some other document (seems to be old):\r\n // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/ST_CellType.html\r\n //\r\n switch (type) {\r\n // If the cell contains formula string.\r\n case 'str':\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains an \"inline\" (not \"shared\") string.\r\n case 'inlineStr':\r\n value = getInlineStringValue()\r\n if (value === undefined) {\r\n throw new Error(`Unsupported \"inline string\" cell value structure`) // : ${cellNode.textContent}`)\r\n }\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains a \"shared\" string.\r\n // \"Shared\" strings is a way for an Excel editor to reduce\r\n // the file size by storing \"commonly used\" strings in a dictionary\r\n // and then referring to such strings by their index in that dictionary.\r\n case 's':\r\n // If a cell has no value then there's no `<c/>` element for it.\r\n // If a `<c/>` element exists then it's not empty.\r\n // The `<v/>`alue is a key in the \"shared strings\" dictionary of the\r\n // XLSX file, so look it up in the `values` dictionary by the numeric key.\r\n value = values[parseInt(value)]\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n case 'b':\r\n value = value === '1' ? true : false\r\n break\r\n\r\n // Stub: blank stub cell that is ignored by data processing utilities.\r\n case 'z':\r\n value = undefined\r\n break\r\n\r\n // Error: `value` is a numeric code.\r\n // They also wrote: \"and `w` property stores its common name\".\r\n // It's unclear what they meant by that.\r\n case 'e':\r\n value = decodeError(value)\r\n break\r\n\r\n // Date: a string to be parsed as a date.\r\n // (usually a string in \"ISO 8601\" format)\r\n case 'd':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = new Date(value)\r\n break\r\n\r\n case 'n':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = parseFloat(value)\r\n // XLSX does have \"d\" type for dates, but it's not commonly used.\r\n // specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n //\r\n // Format IDs:\r\n // https://xlsxwriter.readthedocs.io/format.html#format-set-num-format\r\n //\r\n const styleId = getStyleId()\r\n if (styleId) {\r\n // styleId = parseInt(styleId)\r\n const style = styles[styleId]\r\n if (!style) {\r\n throw new Error(`Cell style not found: ${styleId}`)\r\n }\r\n if (BUILT_IN_DATE_NUMBER_FORMAT_IDS.indexOf(parseInt(style.numberFormat.id)) >= 0 ||\r\n (options.dateFormat && style.numberFormat.template === options.dateFormat) ||\r\n (options.smartDateParser !== false && style.numberFormat.template && isDateTemplate(style.numberFormat.template))) {\r\n value = parseDate(value, properties)\r\n }\r\n }\r\n break\r\n\r\n default:\r\n throw new TypeError(`Cell type not supported: ${type}`)\r\n }\r\n\r\n // Convert empty values to `null`.\r\n if (value === undefined) {\r\n value = null\r\n }\r\n\r\n return value\r\n}\r\n\r\n// Decodes numeric error code to a string code.\r\n// https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\nfunction decodeError(errorCode) {\r\n // While the error values are determined by the application,\r\n // the following are some example error values that could be used:\r\n switch (errorCode) {\r\n case 0x00:\r\n return '#NULL!'\r\n case 0x07:\r\n return '#DIV/0!'\r\n case 0x0F:\r\n return '#VALUE!'\r\n case 0x17:\r\n return '#REF!'\r\n case 0x1D:\r\n return '#NAME?'\r\n case 0x24:\r\n return '#NUM!'\r\n case 0x2A:\r\n return '#N/A'\r\n case 0x2B:\r\n return '#GETTING_DATA'\r\n default:\r\n // Such error code doesn't exist. I made it up.\r\n return `#ERROR_${errorCode}`\r\n }\r\n}\r\n\r\nfunction isDateTemplate(template) {\r\n const tokens = template.split(/\\W+/)\r\n for (const token of tokens) {\r\n if (['MM', 'DD', 'YY', 'YYYY'].indexOf(token) < 0) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n"],"file":"parseCellValue.js"}
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseCellValue.js"],"names":["parseDate","BUILT_IN_DATE_NUMBER_FORMAT_IDS","getCellValue","value","type","getInlineStringValue","getStyleId","styles","values","properties","options","trim","undefined","Error","parseInt","decodeError","Date","parseFloat","styleId","style","indexOf","numberFormat","id","dateFormat","template","smartDateParser","isDateTemplate","TypeError","errorCode","toLowerCase","tokens","split","token","DATE_TEMPLATE_TOKENS"],"mappings":"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","sourcesContent":["import parseDate from './parseDate'\r\n\r\n// https://hexdocs.pm/xlsxir/number_styles.html\r\nconst BUILT_IN_DATE_NUMBER_FORMAT_IDS = [14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]\r\n\r\nexport default function getCellValue(value, type, {\r\n\tgetInlineStringValue,\r\n\tgetStyleId,\r\n\tstyles,\r\n\tvalues,\r\n\tproperties,\r\n\toptions\r\n}) {\r\n if (!type) {\r\n // Default cell type is \"n\" (numeric).\r\n // http://www.datypic.com/sc/ooxml/t-ssml_CT_Cell.html\r\n type = 'n'\r\n }\r\n\r\n // Available Excel cell types:\r\n // https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\n //\r\n // Some other document (seems to be old):\r\n // http://webapp.docx4java.org/OnlineDemo/ecma376/SpreadsheetML/ST_CellType.html\r\n //\r\n switch (type) {\r\n // If the cell contains formula string.\r\n case 'str':\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains an \"inline\" (not \"shared\") string.\r\n case 'inlineStr':\r\n value = getInlineStringValue()\r\n if (value === undefined) {\r\n throw new Error(`Unsupported \"inline string\" cell value structure`) // : ${cellNode.textContent}`)\r\n }\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n // If the cell contains a \"shared\" string.\r\n // \"Shared\" strings is a way for an Excel editor to reduce\r\n // the file size by storing \"commonly used\" strings in a dictionary\r\n // and then referring to such strings by their index in that dictionary.\r\n case 's':\r\n // If a cell has no value then there's no `<c/>` element for it.\r\n // If a `<c/>` element exists then it's not empty.\r\n // The `<v/>`alue is a key in the \"shared strings\" dictionary of the\r\n // XLSX file, so look it up in the `values` dictionary by the numeric key.\r\n value = values[parseInt(value)]\r\n value = value.trim()\r\n if (value === '') {\r\n value = undefined\r\n }\r\n break\r\n\r\n case 'b':\r\n value = value === '1' ? true : false\r\n break\r\n\r\n // Stub: blank stub cell that is ignored by data processing utilities.\r\n case 'z':\r\n value = undefined\r\n break\r\n\r\n // Error: `value` is a numeric code.\r\n // They also wrote: \"and `w` property stores its common name\".\r\n // It's unclear what they meant by that.\r\n case 'e':\r\n value = decodeError(value)\r\n break\r\n\r\n // Date: a string to be parsed as a date.\r\n // (usually a string in \"ISO 8601\" format)\r\n case 'd':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = new Date(value)\r\n break\r\n\r\n case 'n':\r\n if (value === undefined) {\r\n break\r\n }\r\n value = parseFloat(value)\r\n // XLSX does have \"d\" type for dates, but it's not commonly used.\r\n // Instead, spreadsheets prefer using \"n\" type for dates for some reason.\r\n //\r\n // In such cases, sometimes a \"date\" type could be heuristically detected\r\n // by looking at such numeric value \"format\" and seeing if it's a date-specific one.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n //\r\n // The list of generic numeric value \"formats\":\r\n // https://xlsxwriter.readthedocs.io/format.html#format-set-num-format\r\n //\r\n const styleId = getStyleId()\r\n if (styleId) {\r\n // styleId = parseInt(styleId)\r\n const style = styles[styleId]\r\n if (!style) {\r\n throw new Error(`Cell style not found: ${styleId}`)\r\n }\r\n if (BUILT_IN_DATE_NUMBER_FORMAT_IDS.indexOf(parseInt(style.numberFormat.id)) >= 0 ||\r\n (options.dateFormat && style.numberFormat.template === options.dateFormat) ||\r\n (options.smartDateParser !== false && style.numberFormat.template && isDateTemplate(style.numberFormat.template))) {\r\n value = parseDate(value, properties)\r\n }\r\n }\r\n break\r\n\r\n default:\r\n throw new TypeError(`Cell type not supported: ${type}`)\r\n }\r\n\r\n // Convert empty values to `null`.\r\n if (value === undefined) {\r\n value = null\r\n }\r\n\r\n return value\r\n}\r\n\r\n// Decodes numeric error code to a string code.\r\n// https://github.com/SheetJS/sheetjs/blob/19620da30be2a7d7b9801938a0b9b1fd3c4c4b00/docbits/52_datatype.md\r\nfunction decodeError(errorCode) {\r\n // While the error values are determined by the application,\r\n // the following are some example error values that could be used:\r\n switch (errorCode) {\r\n case 0x00:\r\n return '#NULL!'\r\n case 0x07:\r\n return '#DIV/0!'\r\n case 0x0F:\r\n return '#VALUE!'\r\n case 0x17:\r\n return '#REF!'\r\n case 0x1D:\r\n return '#NAME?'\r\n case 0x24:\r\n return '#NUM!'\r\n case 0x2A:\r\n return '#N/A'\r\n case 0x2B:\r\n return '#GETTING_DATA'\r\n default:\r\n // Such error code doesn't exist. I made it up.\r\n return `#ERROR_${errorCode}`\r\n }\r\n}\r\n\r\nfunction isDateTemplate(template) {\r\n // Date format tokens could be in upper case or in lower case.\r\n // There seems to be no single standard.\r\n // So lowercase the template first.\r\n template = template.toLowerCase()\r\n const tokens = template.split(/\\W+/)\r\n for (const token of tokens) {\r\n if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\n// These tokens could be in upper case or in lower case.\r\n// There seems to be no single standard, so using lower case.\r\nconst DATE_TEMPLATE_TOKENS = [\r\n // Seconds (min two digits). Example: \"05\".\r\n 'ss',\r\n // Minutes (min two digits). Example: \"05\". Could also be \"Months\". Weird.\r\n 'mm',\r\n // Hours. Example: \"1\".\r\n 'h',\r\n // Hours (min two digits). Example: \"01\".\r\n 'hh',\r\n // \"AM\" part of \"AM/PM\". Lowercased just in case.\r\n 'am',\r\n // \"PM\" part of \"AM/PM\". Lowercased just in case.\r\n 'pm',\r\n // Day. Example: \"1\"\r\n 'd',\r\n // Day (min two digits). Example: \"01\"\r\n 'dd',\r\n // Month (numeric). Example: \"1\".\r\n 'm',\r\n // Month (numeric, min two digits). Example: \"01\". Could also be \"Minutes\". Weird.\r\n 'mm',\r\n // Month (shortened month name). Example: \"Jan\".\r\n 'mmm',\r\n // Month (full month name). Example: \"January\".\r\n 'mmmm',\r\n // Two-digit year. Example: \"20\".\r\n 'yy',\r\n // Full year. Example: \"2020\".\r\n 'yyyy'\r\n];"],"file":"parseCellValue.js"}
|
|
@@ -11,7 +11,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "und
|
|
|
11
11
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
12
|
|
|
13
13
|
import { parseCellCoordinates } from './coordinates';
|
|
14
|
-
import { getDimensions } from '../xml/xlsx';
|
|
14
|
+
import { getDimensions } from '../xml/xlsx'; // `dimensions` defines the spreadsheet area containing all non-empty cells.
|
|
15
|
+
// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
|
|
16
|
+
|
|
15
17
|
export default function parseDimensions(sheet) {
|
|
16
18
|
var dimensions = getDimensions(sheet);
|
|
17
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseDimensions.js"],"names":["parseCellCoordinates","getDimensions","parseDimensions","sheet","dimensions","split","map","row","column","length"],"mappings":";;;;;;;;;;;;AAAA,SACEA,oBADF,QAEO,eAFP;AAIA,SACEC,aADF,QAEO,aAFP;
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseDimensions.js"],"names":["parseCellCoordinates","getDimensions","parseDimensions","sheet","dimensions","split","map","row","column","length"],"mappings":";;;;;;;;;;;;AAAA,SACEA,oBADF,QAEO,eAFP;AAIA,SACEC,aADF,QAEO,aAFP,C,CAIA;AACA;;AACA,eAAe,SAASC,eAAT,CAAyBC,KAAzB,EAAgC;AAC7C,MAAIC,UAAU,GAAGH,aAAa,CAACE,KAAD,CAA9B;;AACA,MAAIC,UAAJ,EAAgB;AACdA,IAAAA,UAAU,GAAGA,UAAU,CAACC,KAAX,CAAiB,GAAjB,EAAsBC,GAAtB,CAA0BN,oBAA1B,EAAgDM,GAAhD,CAAoD;AAAA;AAAA,UAAEC,GAAF;AAAA,UAAOC,MAAP;;AAAA,aAAoB;AACnFD,QAAAA,GAAG,EAAHA,GADmF;AAEnFC,QAAAA,MAAM,EAANA;AAFmF,OAApB;AAAA,KAApD,CAAb,CADc,CAKd;AACA;;AACA,QAAIJ,UAAU,CAACK,MAAX,KAAsB,CAA1B,EAA6B;AAC3BL,MAAAA,UAAU,GAAG,CAACA,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAb;AACD;;AACD,WAAOA,UAAP;AACD;AACF","sourcesContent":["import {\r\n parseCellCoordinates\r\n} from './coordinates'\r\n\r\nimport {\r\n getDimensions\r\n} from '../xml/xlsx'\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 parseDimensions(sheet) {\r\n let dimensions = getDimensions(sheet)\r\n if (dimensions) {\r\n dimensions = dimensions.split(':').map(parseCellCoordinates).map(([row, column]) => ({\r\n row,\r\n column\r\n }))\r\n // When there's only a single cell on a sheet\r\n // there can sometimes be just \"A1\" for the dimensions string.\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\r\n"],"file":"parseDimensions.js"}
|
|
@@ -3,7 +3,9 @@ import parseDimensions from './parseDimensions';
|
|
|
3
3
|
import { calculateDimensions } from './coordinates';
|
|
4
4
|
export default function parseSheet(content, xml, values, styles, properties, options) {
|
|
5
5
|
var sheet = xml.createDocument(content);
|
|
6
|
-
var cells = parseCells(sheet, xml, values, styles, properties, options);
|
|
6
|
+
var cells = parseCells(sheet, xml, values, styles, properties, options); // `dimensions` defines the spreadsheet area containing all non-empty cells.
|
|
7
|
+
// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1
|
|
8
|
+
|
|
7
9
|
var dimensions = parseDimensions(sheet) || calculateDimensions(cells);
|
|
8
10
|
return {
|
|
9
11
|
cells: cells,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../source/read/parseSheet.js"],"names":["parseCells","parseDimensions","calculateDimensions","parseSheet","content","xml","values","styles","properties","options","sheet","createDocument","cells","dimensions"],"mappings":"AAAA,OAAOA,UAAP,MAAuB,cAAvB;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AAEA,SAASC,mBAAT,QAAoC,eAApC;AAEA,eAAe,SAASC,UAAT,CAAoBC,OAApB,EAA6BC,GAA7B,EAAkCC,MAAlC,EAA0CC,MAA1C,EAAkDC,UAAlD,EAA8DC,OAA9D,EAAuE;AACpF,MAAMC,KAAK,GAAGL,GAAG,CAACM,cAAJ,CAAmBP,OAAnB,CAAd;AAEA,MAAMQ,KAAK,GAAGZ,UAAU,CAACU,KAAD,EAAQL,GAAR,EAAaC,MAAb,EAAqBC,MAArB,EAA6BC,UAA7B,EAAyCC,OAAzC,CAAxB;AACA,MAAMI,UAAU,GAAGZ,eAAe,CAACS,KAAD,CAAf,IAA0BR,mBAAmB,CAACU,KAAD,CAAhE;AAEA,SAAO;AAAEA,IAAAA,KAAK,EAALA,KAAF;AAASC,IAAAA,UAAU,EAAVA;AAAT,GAAP;AACD","sourcesContent":["import parseCells from './parseCells'\r\nimport parseDimensions from './parseDimensions'\r\n\r\nimport { calculateDimensions } from './coordinates'\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 const dimensions = parseDimensions(sheet) || calculateDimensions(cells)\r\n\r\n return { cells, dimensions }\r\n}"],"file":"parseSheet.js"}
|
|
1
|
+
{"version":3,"sources":["../../source/read/parseSheet.js"],"names":["parseCells","parseDimensions","calculateDimensions","parseSheet","content","xml","values","styles","properties","options","sheet","createDocument","cells","dimensions"],"mappings":"AAAA,OAAOA,UAAP,MAAuB,cAAvB;AACA,OAAOC,eAAP,MAA4B,mBAA5B;AAEA,SAASC,mBAAT,QAAoC,eAApC;AAEA,eAAe,SAASC,UAAT,CAAoBC,OAApB,EAA6BC,GAA7B,EAAkCC,MAAlC,EAA0CC,MAA1C,EAAkDC,UAAlD,EAA8DC,OAA9D,EAAuE;AACpF,MAAMC,KAAK,GAAGL,GAAG,CAACM,cAAJ,CAAmBP,OAAnB,CAAd;AAEA,MAAMQ,KAAK,GAAGZ,UAAU,CAACU,KAAD,EAAQL,GAAR,EAAaC,MAAb,EAAqBC,MAArB,EAA6BC,UAA7B,EAAyCC,OAAzC,CAAxB,CAHoF,CAKpF;AACA;;AACA,MAAMI,UAAU,GAAGZ,eAAe,CAACS,KAAD,CAAf,IAA0BR,mBAAmB,CAACU,KAAD,CAAhE;AAEA,SAAO;AAAEA,IAAAA,KAAK,EAALA,KAAF;AAASC,IAAAA,UAAU,EAAVA;AAAT,GAAP;AACD","sourcesContent":["import parseCells from './parseCells'\r\nimport parseDimensions from './parseDimensions'\r\n\r\nimport { calculateDimensions } from './coordinates'\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}"],"file":"parseSheet.js"}
|
package/package.json
CHANGED
package/web-worker/index.d.ts
CHANGED
|
@@ -1 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
ParseWithSchemaOptions,
|
|
3
|
+
ParseWithMapOptions,
|
|
4
|
+
ParseWithoutSchemaOptions,
|
|
5
|
+
ParsedObjectsResult,
|
|
6
|
+
Row
|
|
7
|
+
} from '../types.d';
|
|
8
|
+
|
|
9
|
+
export function parseExcelDate(excelSerialDate: number) : typeof Date;
|
|
10
|
+
|
|
11
|
+
type Input = File;
|
|
12
|
+
|
|
13
|
+
export function readXlsxFile<T extends object>(input: Input, options: ParseWithSchemaOptions<T>) : Promise<ParsedObjectsResult<T>>;
|
|
14
|
+
export function readXlsxFile<T extends object>(input: Input, options: ParseWithMapOptions) : Promise<ParsedObjectsResult<T>>;
|
|
15
|
+
export function readXlsxFile(input: Input, options?: ParseWithoutSchemaOptions) : Promise<Row[]>;
|
|
16
|
+
|
|
17
|
+
export default readXlsxFile;
|
package/web-worker/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as default } from '../modules/read/
|
|
1
|
+
export { default as default } from '../modules/read/readXlsxFileWebWorker'
|
|
2
2
|
export { default as parseExcelDate } from '../modules/read/parseDate'
|
|
3
3
|
export { default as Integer } from '../modules/types/Integer'
|
|
4
4
|
export { default as Email } from '../modules/types/Email'
|