| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  | /*! xlsxspread.js (C) SheetJS LLC -- https://sheetjs.com/ */ | 
					
						
							|  |  |  | /* eslint-env browser */ | 
					
						
							|  |  |  | /*global XLSX */ | 
					
						
							|  |  |  | /*exported stox, xtos */ | 
					
						
							| 
									
										
										
										
											2022-08-22 00:51:51 +00:00
										 |  |  | console.log("The latest version of the xlsxspread.js script is at https://cdn.sheetjs.com/xspreadsheet/xlsxspread.js !") | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Converts data from SheetJS to x-spreadsheet | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param  {Object} wb SheetJS workbook object | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @returns {Object[]} An x-spreadsheet data | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-10-05 17:57:19 +00:00
										 |  |  | function stox(wb) { | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |   var out = []; | 
					
						
							|  |  |  |   wb.SheetNames.forEach(function (name) { | 
					
						
							|  |  |  |     var o = { name: name, rows: {} }; | 
					
						
							|  |  |  |     var ws = wb.Sheets[name]; | 
					
						
							| 
									
										
										
										
											2022-08-03 16:37:10 +00:00
										 |  |  |     if(!ws || !ws["!ref"]) return; | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |     var range = XLSX.utils.decode_range(ws['!ref']); | 
					
						
							|  |  |  |     // sheet_to_json will lost empty row and col at begin as default
 | 
					
						
							|  |  |  |     range.s = { r: 0, c: 0 }; | 
					
						
							|  |  |  |     var aoa = XLSX.utils.sheet_to_json(ws, { | 
					
						
							|  |  |  |       raw: false, | 
					
						
							|  |  |  |       header: 1, | 
					
						
							|  |  |  |       range: range | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     aoa.forEach(function (r, i) { | 
					
						
							|  |  |  |       var cells = {}; | 
					
						
							|  |  |  |       r.forEach(function (c, j) { | 
					
						
							|  |  |  |         cells[j] = { text: c }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var cellRef = XLSX.utils.encode_cell({ r: i, c: j }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ( ws[cellRef] != null && ws[cellRef].f != null) { | 
					
						
							|  |  |  |           cells[j].text = "=" + ws[cellRef].f; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       o.rows[i] = { cells: cells }; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     o.merges = []; | 
					
						
							|  |  |  |     (ws["!merges"]||[]).forEach(function (merge, i) { | 
					
						
							|  |  |  |       //Needed to support merged cells with empty content
 | 
					
						
							|  |  |  |       if (o.rows[merge.s.r] == null) { | 
					
						
							|  |  |  |         o.rows[merge.s.r] = { cells: {} }; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (o.rows[merge.s.r].cells[merge.s.c] == null) { | 
					
						
							|  |  |  |         o.rows[merge.s.r].cells[merge.s.c] = {}; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       o.rows[merge.s.r].cells[merge.s.c].merge = [ | 
					
						
							|  |  |  |         merge.e.r - merge.s.r, | 
					
						
							|  |  |  |         merge.e.c - merge.s.c | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       o.merges[i] = XLSX.utils.encode_range(merge); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     out.push(o); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return out; | 
					
						
							| 
									
										
										
										
											2021-10-05 17:57:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Converts data from x-spreadsheet to SheetJS | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param  {Object[]} sdata An x-spreadsheet data object | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @returns {Object} A SheetJS workbook object | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-10-05 17:57:19 +00:00
										 |  |  | function xtos(sdata) { | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |   var out = XLSX.utils.book_new(); | 
					
						
							|  |  |  |   sdata.forEach(function (xws) { | 
					
						
							|  |  |  |     var ws = {}; | 
					
						
							|  |  |  |     var rowobj = xws.rows; | 
					
						
							| 
									
										
										
										
											2022-04-15 23:06:45 +00:00
										 |  |  |     var minCoord = { r: 0, c: 0 }, maxCoord = { r: 0, c: 0 }; | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |     for (var ri = 0; ri < rowobj.len; ++ri) { | 
					
						
							|  |  |  |       var row = rowobj[ri]; | 
					
						
							|  |  |  |       if (!row) continue; | 
					
						
							| 
									
										
										
										
											2021-10-05 17:57:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |       Object.keys(row.cells).forEach(function (k) { | 
					
						
							|  |  |  |         var idx = +k; | 
					
						
							|  |  |  |         if (isNaN(idx)) return; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         var lastRef = XLSX.utils.encode_cell({ r: ri, c: idx }); | 
					
						
							| 
									
										
										
										
											2022-04-15 23:06:45 +00:00
										 |  |  |         if (ri > maxCoord.r) maxCoord.r = ri; | 
					
						
							|  |  |  |         if (idx > maxCoord.c) maxCoord.c = idx; | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         var cellText = row.cells[k].text, type = "s"; | 
					
						
							|  |  |  |         if (!cellText) { | 
					
						
							|  |  |  |           cellText = ""; | 
					
						
							|  |  |  |           type = "z"; | 
					
						
							| 
									
										
										
										
											2022-05-18 05:42:28 +00:00
										 |  |  |         } else if (!isNaN(Number(cellText))) { | 
					
						
							|  |  |  |           cellText = Number(cellText); | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  |           type = "n"; | 
					
						
							|  |  |  |         } else if (cellText.toLowerCase() === "true" || cellText.toLowerCase() === "false") { | 
					
						
							|  |  |  |           cellText = Boolean(cellText); | 
					
						
							|  |  |  |           type = "b"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ws[lastRef] = { v: cellText, t: type }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (type == "s" && cellText[0] == "=") { | 
					
						
							|  |  |  |           ws[lastRef].f = cellText.slice(1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (row.cells[k].merge != null) { | 
					
						
							|  |  |  |           if (ws["!merges"] == null) ws["!merges"] = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           ws["!merges"].push({ | 
					
						
							|  |  |  |             s: { r: ri, c: idx }, | 
					
						
							|  |  |  |             e: { | 
					
						
							|  |  |  |               r: ri + row.cells[k].merge[0], | 
					
						
							|  |  |  |               c: idx + row.cells[k].merge[1] | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-04-15 23:06:45 +00:00
										 |  |  |     ws["!ref"] = minCoord ? XLSX.utils.encode_range({ | 
					
						
							|  |  |  |       s: minCoord, | 
					
						
							|  |  |  |       e: maxCoord | 
					
						
							|  |  |  |     }) : "A1"; | 
					
						
							| 
									
										
										
										
											2021-10-13 04:43:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     XLSX.utils.book_append_sheet(out, ws, xws.name); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return out; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-08-22 00:51:51 +00:00
										 |  |  | 
 |