forked from sheetjs/sheetjs
		
	version bump 0.19.3
This commit is contained in:
		
							parent
							
								
									af8e3d9171
								
							
						
					
					
						commit
						333e4e40f9
					
				| @ -11,6 +11,7 @@ | ||||
| 		"comma-dangle": [ 2, "never" ], | ||||
| 		"curly": 0, | ||||
| 		"no-bitwise": 0, | ||||
| 		"no-cond-assign": 1, | ||||
| 		"no-console": 0, | ||||
| 		"no-control-regex": 0, | ||||
| 		"no-unused-vars": 1, | ||||
|  | ||||
| @ -4,6 +4,11 @@ This log is intended to keep track of backwards-incompatible changes, including | ||||
| but not limited to API changes and file location changes.  Minor behavioral | ||||
| changes may not be included if they are not expected to break existing code. | ||||
| 
 | ||||
| ## v0.19.3 | ||||
| 
 | ||||
| * XLSX Ensure comment address is valid (h/t @slonser) | ||||
| * Enforce Excel worksheet name restrictions | ||||
| 
 | ||||
| ## v0.19.2 | ||||
| 
 | ||||
| * XLSX proper decoding of hyperlinks (h/t @tw-yaxu) | ||||
| @ -51,7 +56,7 @@ changes may not be included if they are not expected to break existing code. | ||||
| ## v0.18.8 | ||||
| 
 | ||||
| * Plaintext parsing of dateless meridien time values (`1:23:45 PM`) | ||||
| * Legacy format (SYLK / WK# / Multiplan) minutiae  | ||||
| * Legacy format (SYLK / WK# / Multiplan) minutiae | ||||
| 
 | ||||
| ## v0.18.7 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							| @ -113,6 +113,7 @@ BYTEFILER=dist/xlsx.extendscript.js xlsx.mjs | ||||
| bytes: ## Display minified and gzipped file sizes
 | ||||
| 	@for i in $(BYTEFILEC); do npx printj "%-30s %7d %10d" $$i $$(wc -c < $$i) $$(gzip --best --stdout $$i | wc -c); done | ||||
| 	@for i in $(BYTEFILER); do npx printj "%-30s %7d" $$i $$(wc -c < $$i); done | ||||
| 	@npx printj "%-30s         %10d" "treeshake" "$$(npx esbuild@0.14.14 --bundle misc/import.js | wc -c)" | ||||
| 
 | ||||
| 
 | ||||
| .PHONY: git | ||||
|  | ||||
| @ -9,12 +9,6 @@ Edit complex templates with ease; let out your inner Picasso with styling; make | ||||
| custom sheets with images/graphs/PivotTables; evaluate formula expressions and | ||||
| port calculations to web apps; automate common spreadsheet tasks, and much more! | ||||
| 
 | ||||
| [](https://github.com/SheetJS/sheetjs/blob/master/LICENSE) | ||||
| [](https://github.com/SheetJS/sheetjs/actions) | ||||
| [](https://snyk.io/test/github/SheetJS/sheetjs) | ||||
| [](https://cdn.sheetjs.com/) | ||||
| [](https://github.com/SheetJS/sheetjs) | ||||
| 
 | ||||
| [](https://github.com/SheetJS/sheetjs) | ||||
| 
 | ||||
| [](https://saucelabs.com/u/sheetjs) | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
|  | ||||
| @ -115,14 +115,17 @@ function safe1904(wb/*:Workbook*/)/*:string*/ { | ||||
| 
 | ||||
| var badchars = /*#__PURE__*/":][*?\/\\".split(""); | ||||
| function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
|  | ||||
							
								
								
									
										32
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										32
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										146
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										146
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -160,7 +160,7 @@ var DO_NOT_EXPORT_CODEPAGE = true; | ||||
| /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| function make_xlsx_lib(XLSX){ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*global cptable:true, window */ | ||||
| var $cptable; | ||||
| @ -203,6 +203,11 @@ function utf16leread(data) { | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16lereadu(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16beread(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8)); | ||||
| @ -1530,7 +1535,7 @@ function slice_by_16_tables(T) { | ||||
| 		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; | ||||
| 	} | ||||
| 	var out = []; | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	return out; | ||||
| } | ||||
| var TT = slice_by_16_tables(T0); | ||||
| @ -5588,68 +5593,67 @@ function add_rels(rels, rId, f, type, relobj, targetmode) { | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file, res, tag) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base, file) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods() { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS = [ | ||||
| @ -6772,7 +6776,7 @@ function parse_FtArray(blob, length) { | ||||
| 		var ft = blob.read_shift(2); | ||||
| 		blob.l-=2; | ||||
| 		try { | ||||
| 			fts.push(FtTab[ft](blob, tgt - blob.l)); | ||||
| 			fts[ft] = FtTab[ft](blob, tgt - blob.l); | ||||
| 		} catch(e) { blob.l = tgt; return fts; } | ||||
| 	} | ||||
| 	if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence");
 | ||||
| @ -7330,9 +7334,11 @@ function parse_Lbl(blob, length, opts) { | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| /* [MS-XLS] 2.4.106 TODO: verify filename encoding */ | ||||
| /* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */ | ||||
| function parse_ExternSheet(blob, length, opts) { | ||||
| 	if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	/* see issue 2907 */ | ||||
| 	if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); | ||||
| 	while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); | ||||
| 		// [iSupBook, itabFirst, itabLast];
 | ||||
| @ -12244,6 +12250,7 @@ function sheet_insert_comments(sheet, comments, threaded, people) { | ||||
| 	var cell; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -17287,14 +17294,17 @@ function safe1904(wb) { | ||||
| 
 | ||||
| var badchars = ":][*?\/\\".split(""); | ||||
| function check_ws_name(n, safe) { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -21768,7 +21778,7 @@ function make_html_row(ws, r, R, o) { | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
| @ -25766,7 +25776,13 @@ function read_plaintext_raw(data, o) { | ||||
| function read_utf16(data, o) { | ||||
| 	var d = data; | ||||
| 	if(o.type == 'base64') d = Base64_decode(d); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2)); | ||||
| 	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : ( | ||||
| 		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") : | ||||
| 		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? ( | ||||
| 			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2)) | ||||
| 		) : utf16leread(d.slice(2)) | ||||
| 	); | ||||
| 	o.type = "binary"; | ||||
| 	return read_plaintext(d, o); | ||||
| } | ||||
| @ -26593,6 +26609,8 @@ XLSX.writeFileAsync = writeFileAsync; | ||||
| XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.set_fs = set_fs; | ||||
| XLSX.set_cptable = set_cptable; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
|  | ||||
							
								
								
									
										32
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										32
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										18
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										18
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								misc/import.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								misc/import.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| export { version } from "../"; | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
| 	"name": "xlsx", | ||||
| 	"version": "0.19.2", | ||||
| 	"version": "0.19.3", | ||||
| 	"author": "sheetjs", | ||||
| 	"description": "SheetJS Spreadsheet data parser and writer", | ||||
| 	"keywords": [ | ||||
|  | ||||
							
								
								
									
										15
									
								
								test.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								test.js
									
									
									
									
									
								
							| @ -1903,6 +1903,21 @@ describe('invalid files', function() { | ||||
| 			wb.SheetNames.push(wb.SheetNames[0]); | ||||
| 			assert.throws(function() { X.write(wb, {type:'binary'}); }); | ||||
| 		}); | ||||
| 		it('should fail if sheet name is not valid', function() { | ||||
| 			var names = [ | ||||
| 				"", // cannot be blank
 | ||||
| 				"abcdefghijklmnopqrstuvwxyz1234567890", // cannot exceed 31 chars
 | ||||
| 				"'sheetjs", "sheetjs'", // cannot start or end with apostrophe
 | ||||
| 				"History", // cannot be History
 | ||||
| 				"Sheet:JS", "Sheet]JS", "Sheet[JS", "Sheet*JS", // bad characters
 | ||||
| 				"Sheet?JS", "Sheet\\JS", "Sheet\/JS" | ||||
| 			]; | ||||
| 			names.forEach(function(n) { assert.throws(function() { | ||||
| 				var wb = { SheetNames: [n], Sheets: {} }; | ||||
| 				wb.Sheets[n] = X.utils.aoa_to_sheet([["SheetJS"]]); | ||||
| 				X.write(wb, {type:"binary", bookType:"xlsx"}); | ||||
| 			}); }); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										3
									
								
								test.mts
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								test.mts
									
									
									
									
									
								
							| @ -2341,7 +2341,7 @@ describe('dbf', function() { | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| import { JSDOM } from 'jsdom'; | ||||
| const JSDOM = false; //import { JSDOM } from 'jsdom'; // breaks in latest deno
 | ||||
| var domtest = false; // error: Error: Not implemented: isContext
 | ||||
| var inserted_dom_elements = []; | ||||
| 
 | ||||
| @ -2354,6 +2354,7 @@ function get_dom_element(html: string) { | ||||
| 		return domelt.children[0]; | ||||
| 	} | ||||
| 	if(!JSDOM) throw new Error("Browser test fail"); | ||||
|   // @ts-ignore
 | ||||
| 	return new JSDOM(html).window.document.body.children[0]; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										3
									
								
								test.ts
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								test.ts
									
									
									
									
									
								
							| @ -2341,7 +2341,7 @@ Deno.test('dbf', async function(t) { | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| import { JSDOM } from 'jsdom'; | ||||
| const JSDOM = false; //import { JSDOM } from 'jsdom'; // breaks in latest deno
 | ||||
| var domtest = false; // error: Error: Not implemented: isContext
 | ||||
| var inserted_dom_elements = []; | ||||
| 
 | ||||
| @ -2354,6 +2354,7 @@ function get_dom_element(html: string) { | ||||
| 		return domelt.children[0]; | ||||
| 	} | ||||
| 	if(!JSDOM) throw new Error("Browser test fail"); | ||||
|   // @ts-ignore
 | ||||
| 	return new JSDOM(html).window.document.body.children[0]; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -2340,7 +2340,7 @@ Deno.test('dbf', async function(t) { | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| import { JSDOM } from 'jsdom'; | ||||
| const JSDOM = false; //import { JSDOM } from 'jsdom'; // breaks in latest deno
 | ||||
| var domtest = false; // error: Error: Not implemented: isContext
 | ||||
| var inserted_dom_elements = []; | ||||
| 
 | ||||
| @ -2353,6 +2353,7 @@ function get_dom_element(html: string) { | ||||
| 		return domelt.children[0]; | ||||
| 	} | ||||
| 	if(!JSDOM) throw new Error("Browser test fail"); | ||||
|   // @ts-ignore
 | ||||
| 	return new JSDOM(html).window.document.body.children[0]; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										15
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							| @ -1903,6 +1903,21 @@ describe('invalid files', function() { | ||||
| 			wb.SheetNames.push(wb.SheetNames[0]); | ||||
| 			assert.throws(function() { X.write(wb, {type:'binary'}); }); | ||||
| 		}); | ||||
| 		it('should fail if sheet name is not valid', function() { | ||||
| 			var names = [ | ||||
| 				"", // cannot be blank
 | ||||
| 				"abcdefghijklmnopqrstuvwxyz1234567890", // cannot exceed 31 chars
 | ||||
| 				"'sheetjs", "sheetjs'", // cannot start or end with apostrophe
 | ||||
| 				"History", // cannot be History
 | ||||
| 				"Sheet:JS", "Sheet]JS", "Sheet[JS", "Sheet*JS", // bad characters
 | ||||
| 				"Sheet?JS", "Sheet\\JS", "Sheet\/JS" | ||||
| 			]; | ||||
| 			names.forEach(function(n) { assert.throws(function() { | ||||
| 				var wb = { SheetNames: [n], Sheets: {} }; | ||||
| 				wb.Sheets[n] = X.utils.aoa_to_sheet([["SheetJS"]]); | ||||
| 				X.write(wb, {type:"binary", bookType:"xlsx"}); | ||||
| 			}); }); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										43
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										43
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -227,21 +227,21 @@ export interface ParsingOptions extends CommonOptions { | ||||
|     /** If true, preserve _xlfn. prefixes in formula function names */ | ||||
|     xlfn?: boolean; | ||||
| 
 | ||||
|     /** If true, generate dense-mode worksheets */ | ||||
|     dense?: boolean; | ||||
| 
 | ||||
|     /** | ||||
|      * For single-sheet formats (including CSV), override the worksheet name | ||||
|      * @default "Sheet1" | ||||
|      */ | ||||
|     sheet?: string; | ||||
| 
 | ||||
|     PRN?: boolean; | ||||
| } | ||||
| 
 | ||||
| export interface SheetOption { | ||||
|   /** | ||||
|    * Name of Worksheet (for single-sheet formats) | ||||
|    * @default '' | ||||
|    */ | ||||
|   sheet?: string; | ||||
| } | ||||
| 
 | ||||
| /** Options for write and writeFile */ | ||||
| export interface WritingOptions extends CommonOptions, SheetOption { | ||||
| export interface WritingOptions extends CommonOptions { | ||||
|     /** Output data encoding */ | ||||
|     type?: 'base64' | 'binary' | 'buffer' | 'file' | 'array' | 'string'; | ||||
| 
 | ||||
| @ -285,6 +285,15 @@ export interface WritingOptions extends CommonOptions, SheetOption { | ||||
| 
 | ||||
|     /** Base64 encoding of NUMBERS base for exports */ | ||||
|     numbers?: string; | ||||
| 
 | ||||
|     /** | ||||
|      * For single-sheet formats, export the specified worksheet. | ||||
|      * | ||||
|      * The property must be a string (sheet name) or number (`SheetNames` index). | ||||
|      * | ||||
|      * If this option is omitted, the first worksheet will be exported. | ||||
|      */ | ||||
|     sheet?: string | number; | ||||
| } | ||||
| 
 | ||||
| /** Workbook Object */ | ||||
| @ -814,7 +823,7 @@ export interface JSON2SheetOpts extends CommonOptions, DateNFOption, OriginOptio | ||||
|     skipHeader?: boolean; | ||||
| } | ||||
| 
 | ||||
| export interface Table2SheetOpts extends CommonOptions, DateNFOption, OriginOption, SheetOption { | ||||
| export interface Table2SheetOpts extends CommonOptions, DateNFOption, OriginOption { | ||||
|     /** If true, plaintext parsing will not parse values */ | ||||
|     raw?: boolean; | ||||
| 
 | ||||
| @ -826,6 +835,20 @@ export interface Table2SheetOpts extends CommonOptions, DateNFOption, OriginOpti | ||||
| 
 | ||||
|     /** If true, hidden rows and cells will not be parsed */ | ||||
|     display?: boolean; | ||||
| 
 | ||||
|     /** | ||||
|      * Override the worksheet name | ||||
|      * @default "Sheet1" | ||||
|      */ | ||||
|     sheet?: string; | ||||
| } | ||||
| 
 | ||||
| export interface Table2BookOpts extends Table2SheetOpts { | ||||
|     /** | ||||
|      * Override the worksheet name | ||||
|      * @default "Sheet1" | ||||
|      */ | ||||
|      sheet?: string; | ||||
| } | ||||
| 
 | ||||
| /** General utilities */ | ||||
| @ -842,7 +865,7 @@ export interface XLSX$Utils { | ||||
| 
 | ||||
|     /** BROWSER ONLY! Converts a TABLE DOM element to a worksheet. */ | ||||
|     table_to_sheet(data: any,  opts?: Table2SheetOpts): WorkSheet; | ||||
|     table_to_book(data: any,  opts?: Table2SheetOpts): WorkBook; | ||||
|     table_to_book(data: any,  opts?: Table2BookOpts): WorkBook; | ||||
|     sheet_add_dom(ws: WorkSheet, data: any, opts?: Table2SheetOpts): WorkSheet; | ||||
| 
 | ||||
|     /* --- Export Functions --- */ | ||||
|  | ||||
							
								
								
									
										152
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										152
									
								
								xlsx.flow.js
									
									
									
									
									
								
							| @ -4,7 +4,7 @@ | ||||
| /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| function make_xlsx_lib(XLSX){ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*:: declare var cptable:any; */ | ||||
| /*global cptable:true, window */ | ||||
| @ -48,6 +48,11 @@ function utf16leread(data/*:string*/)/*:string*/ { | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16lereadu(data/*:Uint8Array*/)/*:string*/ { | ||||
| 	var o/*:Array<string>*/ = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16beread(data/*:string*/)/*:string*/ { | ||||
| 	var o/*:Array<string>*/ = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8)); | ||||
| @ -1436,7 +1441,7 @@ function slice_by_16_tables(T) { | ||||
| 		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; | ||||
| 	} | ||||
| 	var out = []; | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	return out; | ||||
| } | ||||
| var TT = slice_by_16_tables(T0); | ||||
| @ -5517,68 +5522,67 @@ function add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/) | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest/*:Array<Array<string> >*/)/*:string*/ { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
| function write_manifest(manifest) { | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_type(file, res, tag) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base/*:string*/, file/*:string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_has(base, file) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS/*:Array<Array<string> >*/ = [ | ||||
| @ -6705,7 +6709,7 @@ function parse_FtArray(blob, length/*::, ot*/) { | ||||
| 		var ft = blob.read_shift(2); | ||||
| 		blob.l-=2; | ||||
| 		try { | ||||
| 			fts.push(FtTab[ft](blob, tgt - blob.l)); | ||||
| 			fts[ft] = FtTab[ft](blob, tgt - blob.l); | ||||
| 		} catch(e) { blob.l = tgt; return fts; } | ||||
| 	} | ||||
| 	if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence");
 | ||||
| @ -7263,9 +7267,11 @@ function parse_Lbl(blob, length, opts) { | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| /* [MS-XLS] 2.4.106 TODO: verify filename encoding */ | ||||
| /* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */ | ||||
| function parse_ExternSheet(blob, length, opts) { | ||||
| 	if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	/* see issue 2907 */ | ||||
| 	if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); | ||||
| 	while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); | ||||
| 		// [iSupBook, itabFirst, itabLast];
 | ||||
| @ -12181,6 +12187,7 @@ function sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<RawComment> | ||||
| 	var cell/*:Cell*/; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -17226,14 +17233,17 @@ function safe1904(wb/*:Workbook*/)/*:string*/ { | ||||
| 
 | ||||
| var badchars = /*#__PURE__*/":][*?\/\\".split(""); | ||||
| function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -21722,7 +21732,7 @@ function make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HT | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
| @ -25724,7 +25734,13 @@ function read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ { | ||||
| function read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 	var d = data; | ||||
| 	if(o.type == 'base64') d = Base64_decode(d); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2)); | ||||
| 	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : ( | ||||
| 		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") : | ||||
| 		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? ( | ||||
| 			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2)) | ||||
| 		) : utf16leread(d.slice(2)) | ||||
| 	); | ||||
| 	o.type = "binary"; | ||||
| 	return read_plaintext(d, o); | ||||
| } | ||||
| @ -26558,6 +26574,8 @@ XLSX.writeFileAsync = writeFileAsync; | ||||
| XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.set_fs = set_fs; | ||||
| XLSX.set_cptable = set_cptable; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
|  | ||||
							
								
								
									
										146
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										146
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							| @ -4,7 +4,7 @@ | ||||
| /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| function make_xlsx_lib(XLSX){ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*global cptable:true, window */ | ||||
| var $cptable; | ||||
| @ -47,6 +47,11 @@ function utf16leread(data) { | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16lereadu(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16beread(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8)); | ||||
| @ -1374,7 +1379,7 @@ function slice_by_16_tables(T) { | ||||
| 		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; | ||||
| 	} | ||||
| 	var out = []; | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	return out; | ||||
| } | ||||
| var TT = slice_by_16_tables(T0); | ||||
| @ -5432,68 +5437,67 @@ function add_rels(rels, rId, f, type, relobj, targetmode) { | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file, res, tag) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base, file) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods() { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS = [ | ||||
| @ -6616,7 +6620,7 @@ function parse_FtArray(blob, length) { | ||||
| 		var ft = blob.read_shift(2); | ||||
| 		blob.l-=2; | ||||
| 		try { | ||||
| 			fts.push(FtTab[ft](blob, tgt - blob.l)); | ||||
| 			fts[ft] = FtTab[ft](blob, tgt - blob.l); | ||||
| 		} catch(e) { blob.l = tgt; return fts; } | ||||
| 	} | ||||
| 	if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence");
 | ||||
| @ -7174,9 +7178,11 @@ function parse_Lbl(blob, length, opts) { | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| /* [MS-XLS] 2.4.106 TODO: verify filename encoding */ | ||||
| /* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */ | ||||
| function parse_ExternSheet(blob, length, opts) { | ||||
| 	if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	/* see issue 2907 */ | ||||
| 	if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); | ||||
| 	while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); | ||||
| 		// [iSupBook, itabFirst, itabLast];
 | ||||
| @ -12088,6 +12094,7 @@ function sheet_insert_comments(sheet, comments, threaded, people) { | ||||
| 	var cell; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -17131,14 +17138,17 @@ function safe1904(wb) { | ||||
| 
 | ||||
| var badchars = ":][*?\/\\".split(""); | ||||
| function check_ws_name(n, safe) { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -21612,7 +21622,7 @@ function make_html_row(ws, r, R, o) { | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
| @ -25610,7 +25620,13 @@ function read_plaintext_raw(data, o) { | ||||
| function read_utf16(data, o) { | ||||
| 	var d = data; | ||||
| 	if(o.type == 'base64') d = Base64_decode(d); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2)); | ||||
| 	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : ( | ||||
| 		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") : | ||||
| 		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? ( | ||||
| 			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2)) | ||||
| 		) : utf16leread(d.slice(2)) | ||||
| 	); | ||||
| 	o.type = "binary"; | ||||
| 	return read_plaintext(d, o); | ||||
| } | ||||
| @ -26437,6 +26453,8 @@ XLSX.writeFileAsync = writeFileAsync; | ||||
| XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.set_fs = set_fs; | ||||
| XLSX.set_cptable = set_cptable; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
| /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| function make_xlsx_lib(XLSX){ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*:: declare var cptable:any; */ | ||||
| /*global cptable:true, window */ | ||||
| @ -48,6 +48,11 @@ function utf16leread(data/*:string*/)/*:string*/ { | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16lereadu(data/*:Uint8Array*/)/*:string*/ { | ||||
| 	var o/*:Array<string>*/ = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16beread(data/*:string*/)/*:string*/ { | ||||
| 	var o/*:Array<string>*/ = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8)); | ||||
| @ -1436,7 +1441,7 @@ function slice_by_16_tables(T) { | ||||
| 		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; | ||||
| 	} | ||||
| 	var out = []; | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	return out; | ||||
| } | ||||
| var TT = slice_by_16_tables(T0); | ||||
| @ -5202,68 +5207,67 @@ function add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/) | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest/*:Array<Array<string> >*/)/*:string*/ { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
| function write_manifest(manifest) { | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_type(file, res, tag) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base/*:string*/, file/*:string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_has(base, file) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS/*:Array<Array<string> >*/ = [ | ||||
| @ -7878,6 +7882,7 @@ function sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<RawComment> | ||||
| 	var cell/*:Cell*/; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -9206,14 +9211,17 @@ function safe1904(wb/*:Workbook*/)/*:string*/ { | ||||
| 
 | ||||
| var badchars = /*#__PURE__*/":][*?\/\\".split(""); | ||||
| function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -9630,7 +9638,7 @@ function make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HT | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
| @ -11741,7 +11749,13 @@ function read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ { | ||||
| function read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 	var d = data; | ||||
| 	if(o.type == 'base64') d = Base64_decode(d); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2)); | ||||
| 	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : ( | ||||
| 		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") : | ||||
| 		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? ( | ||||
| 			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2)) | ||||
| 		) : utf16leread(d.slice(2)) | ||||
| 	); | ||||
| 	o.type = "binary"; | ||||
| 	return read_plaintext(d, o); | ||||
| } | ||||
| @ -12449,6 +12463,8 @@ XLSX.writeFileAsync = writeFileAsync; | ||||
| XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.set_fs = set_fs; | ||||
| XLSX.set_cptable = set_cptable; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
|  | ||||
							
								
								
									
										140
									
								
								xlsx.mini.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										140
									
								
								xlsx.mini.js
									
									
									
									
									
								
							| @ -4,7 +4,7 @@ | ||||
| /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| function make_xlsx_lib(XLSX){ | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*global cptable:true, window */ | ||||
| var $cptable; | ||||
| @ -47,6 +47,11 @@ function utf16leread(data) { | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16lereadu(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8)); | ||||
| 	return o.join(""); | ||||
| } | ||||
| function utf16beread(data) { | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8)); | ||||
| @ -1374,7 +1379,7 @@ function slice_by_16_tables(T) { | ||||
| 		for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; | ||||
| 	} | ||||
| 	var out = []; | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); | ||||
| 	return out; | ||||
| } | ||||
| var TT = slice_by_16_tables(T0); | ||||
| @ -5117,68 +5122,67 @@ function add_rels(rels, rId, f, type, relobj, targetmode) { | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file, res, tag) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base, file) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods() { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS = [ | ||||
| @ -7792,6 +7796,7 @@ function sheet_insert_comments(sheet, comments, threaded, people) { | ||||
| 	var cell; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -9120,14 +9125,17 @@ function safe1904(wb) { | ||||
| 
 | ||||
| var badchars = ":][*?\/\\".split(""); | ||||
| function check_ws_name(n, safe) { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -9542,7 +9550,7 @@ function make_html_row(ws, r, R, o) { | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
| @ -11649,7 +11657,13 @@ function read_plaintext_raw(data, o) { | ||||
| function read_utf16(data, o) { | ||||
| 	var d = data; | ||||
| 	if(o.type == 'base64') d = Base64_decode(d); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2)); | ||||
| 	if(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) d = new Uint8Array(data); | ||||
| 	d = typeof $cptable !== "undefined" ? $cptable.utils.decode(1200, d.slice(2), 'str') : ( | ||||
| 		(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString("utf16le") : | ||||
| 		(typeof Uint8Array !== "undefined" && d instanceof Uint8Array) ? ( | ||||
| 			typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le").decode(d.slice(2)) : utf16lereadu(d.slice(2)) | ||||
| 		) : utf16leread(d.slice(2)) | ||||
| 	); | ||||
| 	o.type = "binary"; | ||||
| 	return read_plaintext(d, o); | ||||
| } | ||||
| @ -12350,6 +12364,8 @@ XLSX.writeFileAsync = writeFileAsync; | ||||
| XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.set_fs = set_fs; | ||||
| XLSX.set_cptable = set_cptable; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
|  | ||||
							
								
								
									
										135
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										135
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							| @ -3,7 +3,7 @@ | ||||
| /*exported XLSX */ | ||||
| /*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */ | ||||
| var XLSX = {}; | ||||
| XLSX.version = '0.19.2'; | ||||
| XLSX.version = '0.19.3'; | ||||
| var current_codepage = 1200, current_ansi = 1252; | ||||
| /*:: declare var cptable:any; */ | ||||
| /*global cptable:true, window */ | ||||
| @ -5517,68 +5517,67 @@ function add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/) | ||||
| 	rels[('/' + relobj.Target).replace("//","/")] = relobj; | ||||
| 	return rId; | ||||
| } | ||||
| /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ | ||||
| /* Part 3 Section 4 Manifest File */ | ||||
| var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; | ||||
| function parse_manifest(d, opts) { | ||||
| 	var str = xlml_normalize(d); | ||||
| 	var Rn; | ||||
| 	var FEtag; | ||||
| 	while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { | ||||
| 		case 'manifest': break; // 4.2 <manifest:manifest>
 | ||||
| 		case 'file-entry': // 4.3 <manifest:file-entry>
 | ||||
| 			FEtag = parsexmltag(Rn[0], false); | ||||
| 			if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); | ||||
| 			break; | ||||
| 		case 'encryption-data': // 4.4 <manifest:encryption-data>
 | ||||
| 		case 'algorithm': // 4.5 <manifest:algorithm>
 | ||||
| 		case 'start-key-generation': // 4.6 <manifest:start-key-generation>
 | ||||
| 		case 'key-derivation': // 4.7 <manifest:key-derivation>
 | ||||
| 			throw new Error("Unsupported ODS Encryption"); | ||||
| 		default: if(opts && opts.WTF) throw Rn; | ||||
| 	} | ||||
|   var str = xlml_normalize(d); | ||||
|   var Rn; | ||||
|   var FEtag; | ||||
|   while (Rn = xlmlregex.exec(str)) | ||||
|     switch (Rn[3]) { | ||||
|       case "manifest": | ||||
|         break; | ||||
|       case "file-entry": | ||||
|         FEtag = parsexmltag(Rn[0], false); | ||||
|         if (FEtag.path == "/" && FEtag.type !== CT_ODS) | ||||
|           throw new Error("This OpenDocument is not a spreadsheet"); | ||||
|         break; | ||||
|       case "encryption-data": | ||||
|       case "algorithm": | ||||
|       case "start-key-generation": | ||||
|       case "key-derivation": | ||||
|         throw new Error("Unsupported ODS Encryption"); | ||||
|       default: | ||||
|         if (opts && opts.WTF) | ||||
|           throw Rn; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function write_manifest(manifest/*:Array<Array<string> >*/)/*:string*/ { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
| 	o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
| 	for(var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
| 	o.push('</manifest:manifest>'); | ||||
| 	return o.join(""); | ||||
| function write_manifest(manifest) { | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n'); | ||||
|   o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n'); | ||||
|   for (var i = 0; i < manifest.length; ++i) | ||||
|     o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n'); | ||||
|   o.push("</manifest:manifest>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| 
 | ||||
| /* Part 3 Section 6 Metadata Manifest File */ | ||||
| function write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + file + '">\n', | ||||
| 		'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + '#' + res + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_type(file, res, tag) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + file + '">\n', | ||||
|     '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf_has(base/*:string*/, file/*:string*/) { | ||||
| 	return [ | ||||
| 		'  <rdf:Description rdf:about="' + base + '">\n', | ||||
| 		'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
| 		'  </rdf:Description>\n' | ||||
| 	].join(""); | ||||
| function write_rdf_has(base, file) { | ||||
|   return [ | ||||
|     '  <rdf:Description rdf:about="' + base + '">\n', | ||||
|     '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n', | ||||
|     "  </rdf:Description>\n" | ||||
|   ].join(""); | ||||
| } | ||||
| function write_rdf(rdf) { | ||||
| 	var o = [XML_HEADER]; | ||||
| 	o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
| 	for(var i = 0; i != rdf.length; ++i) { | ||||
| 		o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
| 		o.push(write_rdf_has("",rdf[i][0])); | ||||
| 	} | ||||
| 	o.push(write_rdf_type("","Document", "pkg")); | ||||
| 	o.push('</rdf:RDF>'); | ||||
| 	return o.join(""); | ||||
|   var o = [XML_HEADER]; | ||||
|   o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n'); | ||||
|   for (var i = 0; i != rdf.length; ++i) { | ||||
|     o.push(write_rdf_type(rdf[i][0], rdf[i][1])); | ||||
|     o.push(write_rdf_has("", rdf[i][0])); | ||||
|   } | ||||
|   o.push(write_rdf_type("", "Document", "pkg")); | ||||
|   o.push("</rdf:RDF>"); | ||||
|   return o.join(""); | ||||
| } | ||||
| /* TODO: pull properties */ | ||||
| function write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ { | ||||
| 	return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>Sheet' + 'JS ' + XLSX.version + '</meta:generator></office:meta></office:document-meta>'; | ||||
| function write_meta_ods(wb, opts) { | ||||
|   return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX.version + "</meta:generator></office:meta></office:document-meta>"; | ||||
| } | ||||
| 
 | ||||
| /* ECMA-376 Part II 11.1 Core Properties Part */ | ||||
| /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */ | ||||
| var CORE_PROPS/*:Array<Array<string> >*/ = [ | ||||
| @ -6705,7 +6704,7 @@ function parse_FtArray(blob, length/*::, ot*/) { | ||||
| 		var ft = blob.read_shift(2); | ||||
| 		blob.l-=2; | ||||
| 		try { | ||||
| 			fts.push(FtTab[ft](blob, tgt - blob.l)); | ||||
| 			fts[ft] = FtTab[ft](blob, tgt - blob.l); | ||||
| 		} catch(e) { blob.l = tgt; return fts; } | ||||
| 	} | ||||
| 	if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence");
 | ||||
| @ -7263,9 +7262,11 @@ function parse_Lbl(blob, length, opts) { | ||||
| 	}; | ||||
| } | ||||
| 
 | ||||
| /* [MS-XLS] 2.4.106 TODO: verify filename encoding */ | ||||
| /* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */ | ||||
| function parse_ExternSheet(blob, length, opts) { | ||||
| 	if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	/* see issue 2907 */ | ||||
| 	if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts); | ||||
| 	var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); | ||||
| 	while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); | ||||
| 		// [iSupBook, itabFirst, itabLast];
 | ||||
| @ -12181,6 +12182,7 @@ function sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<RawComment> | ||||
| 	var cell/*:Cell*/; | ||||
| 	comments.forEach(function(comment) { | ||||
| 		var r = decode_cell(comment.ref); | ||||
| 		if(r.r < 0 || r.c < 0) return; | ||||
| 		if(dense) { | ||||
| 			if(!sheet["!data"][r.r]) sheet["!data"][r.r] = []; | ||||
| 			cell = sheet["!data"][r.r][r.c]; | ||||
| @ -17226,14 +17228,17 @@ function safe1904(wb/*:Workbook*/)/*:string*/ { | ||||
| 
 | ||||
| var badchars = /*#__PURE__*/":][*?\/\\".split(""); | ||||
| function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ { | ||||
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); } | ||||
| 	var _good = true; | ||||
| 	badchars.forEach(function(c) { | ||||
| 		if(n.indexOf(c) == -1) return; | ||||
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		_good = false; | ||||
| 	}); | ||||
| 	return _good; | ||||
| 	try { | ||||
| 		if(n == "") throw new Error("Sheet name cannot be blank"); | ||||
| 		if(n.length > 31) throw new Error("Sheet name cannot exceed 31 chars"); | ||||
| 		if(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error("Sheet name cannot start or end with apostrophe (')"); | ||||
| 		if(n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'"); | ||||
| 		badchars.forEach(function(c) { | ||||
| 			if(n.indexOf(c) == -1) return; | ||||
| 			throw new Error("Sheet name cannot contain : \\ / ? * [ ]"); | ||||
| 		}); | ||||
| 	} catch(e) { if(safe) return false; throw e; } | ||||
| 	return true; | ||||
| } | ||||
| function check_wb_names(N, S, codes) { | ||||
| 	N.forEach(function(n,i) { | ||||
| @ -21722,7 +21727,7 @@ function make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HT | ||||
| 			sp["data-t"] = cell && cell.t || 'z'; | ||||
| 			if(cell.v != null) sp["data-v"] = cell.v; | ||||
| 			if(cell.z != null) sp["data-z"] = cell.z; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target +'">' + w + '</a>'; | ||||
| 			if(cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) +'">' + w + '</a>'; | ||||
| 		} | ||||
| 		sp.id = (o.id || "sjs") + "-" + coord; | ||||
| 		oo.push(writextag('td', w, sp)); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user