forked from sheetjs/sheetjs
		
	version bump 0.8.7: bundlers
demos for browserify/requirejs/webpack
This commit is contained in:
		
							parent
							
								
									5ae6b1965b
								
							
						
					
					
						commit
						3d1f0f79ca
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -9,7 +9,7 @@ tmp | ||||
| *.[pP][rR][nN] | ||||
| *.[sS][lL][kK] | ||||
| *.socialcalc | ||||
| *.[xX][lL][sSwW] | ||||
| *.[xX][lL][sSwWcC] | ||||
| *.[xX][lL][sS][xXmMbB] | ||||
| *.[oO][dD][sS] | ||||
| *.[fF][oO][dD][sS] | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| test_files/ | ||||
| tests/files/ | ||||
| demos/ | ||||
| index.html | ||||
| misc/ | ||||
| node_modules | ||||
| @ -10,7 +11,7 @@ tmp | ||||
| *.[pP][rR][nN] | ||||
| *.[sS][lL][kK] | ||||
| *.socialcalc | ||||
| *.[xX][lL][sSwW] | ||||
| *.[xX][lL][sSwWcC] | ||||
| *.[xX][lL][sS][xXmMbB] | ||||
| *.[oO][dD][sS] | ||||
| *.[fF][oO][dD][sS] | ||||
|  | ||||
| @ -16,6 +16,6 @@ before_install: | ||||
|   - "npm install coveralls mocha-lcov-reporter" | ||||
| before_script: | ||||
|   - "make init" | ||||
|   - "cd test_files; make all; cd -"  | ||||
|   - "cd test_files; make all; cd -" | ||||
| after_success: | ||||
|   - "make coveralls-spin" | ||||
|  | ||||
							
								
								
									
										12
									
								
								Makefile
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								Makefile
									
									
									
									
									
								
							| @ -57,8 +57,9 @@ dist: dist-deps $(TARGET) bower.json ## Prepare JS files for distribution | ||||
| 	misc/strip_sourcemap.sh dist/$(LIB).min.js | ||||
| 	uglifyjs $(UGLIFYOPTS) $(REQS) $(TARGET) -o dist/$(LIB).core.min.js --source-map dist/$(LIB).core.min.map --preamble "$$(head -n 1 bits/00_header.js)" | ||||
| 	misc/strip_sourcemap.sh dist/$(LIB).core.min.js | ||||
| 	uglifyjs $(UGLIFYOPTS) $(REQS) $(ADDONS) $(TARGET) -o dist/$(LIB).full.min.js --source-map dist/$(LIB).full.min.map --preamble "$$(head -n 1 bits/00_header.js)" | ||||
| 	uglifyjs $(UGLIFYOPTS) $(REQS) $(ADDONS) $(TARGET) $(AUXTARGETS) -o dist/$(LIB).full.min.js --source-map dist/$(LIB).full.min.map --preamble "$$(head -n 1 bits/00_header.js)" | ||||
| 	misc/strip_sourcemap.sh dist/$(LIB).full.min.js | ||||
| 	cat <(head -n 1 bits/00_header.js) $(REQS) $(ADDONS) $(TARGET) $(AUXTARGETS) > demos/requirejs/$(LIB).full.js | ||||
| 
 | ||||
| .PHONY: dist-deps | ||||
| dist-deps: ods.js ## Copy dependencies for distribution
 | ||||
| @ -91,6 +92,15 @@ TESTFMT=$(patsubst %,test_%,$(FMT)) | ||||
| $(TESTFMT): test_%: | ||||
| 	FMTS=$* make test | ||||
| 
 | ||||
| .PHONY: demo-browserify | ||||
| demo-browserify: ## Run browserify demo build
 | ||||
| 	make -C demos/browserify | ||||
| 	@echo "start a local server and go to demos/browserify/browserify.html" | ||||
| 
 | ||||
| .PHONY: demo-webpack | ||||
| demo-webpack: ## Run webpack demo build
 | ||||
| 	make -C demos/webpack | ||||
| 	@echo "start a local server and go to demos/webpack/webpack.html" | ||||
| 
 | ||||
| ## Code Checking
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							| @ -73,6 +73,14 @@ An appropriate version for each dependency is included in the dist/ directory. | ||||
| 
 | ||||
| The complete single-file version is generated at `dist/xlsx.full.min.js` | ||||
| 
 | ||||
| ### JS Ecosystem Demos | ||||
| 
 | ||||
| The `demos` directory includes sample projects for: | ||||
| 
 | ||||
| - [`browserify`](http://browserify.org/) | ||||
| - [`requirejs`](http://requirejs.org/) | ||||
| - [`webpack`](https://webpack.js.org/) | ||||
| 
 | ||||
| ### ECMAScript 5 Compatibility | ||||
| 
 | ||||
| Since xlsx.js uses ES5 functions like `Array#forEach`, older browsers require | ||||
| @ -338,7 +346,7 @@ Utilities are available in the `XLSX.utils` object: | ||||
| 
 | ||||
| Exporting: | ||||
| 
 | ||||
| - `sheet_to_json` converts a workbook object to an array of JSON objects. | ||||
| - `sheet_to_json` converts a worksheet object to an array of JSON objects. | ||||
|   `sheet_to_row_object_array` is an alias that will be removed in the future. | ||||
| - `sheet_to_csv` generates delimiter-separated-values output. | ||||
| - `sheet_to_formulae` generates a list of the formulae (with value fallbacks). | ||||
|  | ||||
							
								
								
									
										10
									
								
								bin/xlsx.njs
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								bin/xlsx.njs
									
									
									
									
									
								
							| @ -10,6 +10,7 @@ program | ||||
| 	.usage('[options] <file> [sheetname]') | ||||
| 	.option('-f, --file <file>', 'use specified workbook') | ||||
| 	.option('-s, --sheet <sheet>', 'print specified sheet (default first sheet)') | ||||
| 	.option('-N, --sheet-index <idx>', 'use specified sheet index (0-based)') | ||||
| 	.option('-p, --password <pw>', 'if file is encrypted, try with specified pw') | ||||
| 	.option('-l, --list-sheets', 'list sheet names and exit') | ||||
| 	.option('-o, --output <file>', 'output to specified file') | ||||
| @ -25,6 +26,7 @@ program | ||||
| 	.option('-j, --json', 'emit formatted JSON (all fields text)') | ||||
| 	.option('-J, --raw-js', 'emit raw JS object (raw numbers)') | ||||
| 	.option('-A, --arrays', 'emit rows as JS objects (raw numbers)') | ||||
| 
 | ||||
| 	.option('-F, --field-sep <sep>', 'CSV field separator', ",") | ||||
| 	.option('-R, --row-sep <sep>', 'CSV row separator', "\n") | ||||
| 	.option('-n, --sheet-rows <num>', 'Number of rows to process (0=all rows)') | ||||
| @ -80,6 +82,7 @@ if(program.listSheets) opts.bookSheets = true; | ||||
| if(program.sheetRows) opts.sheetRows = program.sheetRows; | ||||
| if(program.password) opts.password = program.password; | ||||
| if(program.xlsx || program.xlsm || program.xlsb) { | ||||
| 	opts.cellFormula = true; | ||||
| 	opts.cellNF = true; | ||||
| 	if(program.output) sheetname = program.output; | ||||
| } | ||||
| @ -109,7 +112,7 @@ if(program.read) process.exit(0); | ||||
| 
 | ||||
| /*::   if(wb) { */ | ||||
| if(program.listSheets) { | ||||
| 	console.log(wb.SheetNames.join("\n")); | ||||
| 	console.log((wb.SheetNames||[]).join("\n")); | ||||
| 	process.exit(0); | ||||
| } | ||||
| 
 | ||||
| @ -123,7 +126,10 @@ workbook_formats.forEach(function(m) { if(program[m]) { | ||||
| } }); | ||||
| 
 | ||||
| var target_sheet = sheetname || ''; | ||||
| if(target_sheet === '') target_sheet = wb.SheetNames[0]; | ||||
| if(target_sheet === '') { | ||||
| 	if(program.sheetIndex < (wb.SheetNames||[]).length) target_sheet = wb.SheetNames[program.sheetIndex]; | ||||
| 	else target_sheet = (wb.SheetNames||[""])[0]; | ||||
| } | ||||
| 
 | ||||
| var ws; | ||||
| try { | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| XLSX.version = '0.8.6'; | ||||
| XLSX.version = '0.8.7'; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| var current_codepage = 1200, current_cptable; | ||||
| if(typeof module !== "undefined" && typeof require !== 'undefined') { | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel'); | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel.js'); | ||||
| 	current_cptable = cptable[current_codepage]; | ||||
| } | ||||
| function reset_cp() { set_cp(1200); } | ||||
|  | ||||
| @ -55,7 +55,7 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -3,7 +3,7 @@ var make_offcrypto = function(O, _crypto) { | ||||
| 	var crypto; | ||||
| 	if(typeof _crypto !== 'undefined') crypto = _crypto; | ||||
| 	else if(typeof require !== 'undefined') { | ||||
| 		try { crypto = require('cry'+'pto'); } | ||||
| 		try { crypto = require('crypto'); } | ||||
| 		catch(e) { crypto = null; } | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -68,7 +68,7 @@ function parse_VtVecHeadingPair(blob) { | ||||
| /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ | ||||
| function parse_dictionary(blob,CodePage) { | ||||
| 	var cnt = blob.read_shift(4); | ||||
| 	var dict/*{[number]:string}*/ = ({}/*:any*/); | ||||
| 	var dict/*:{[number]:string}*/ = ({}/*:any*/); | ||||
| 	for(var j = 0; j != cnt; ++j) { | ||||
| 		var pid = blob.read_shift(4); | ||||
| 		var len = blob.read_shift(4); | ||||
| @ -149,7 +149,7 @@ function parse_PropertySet(blob, PIDSI) { | ||||
| 	var NumProps = blob.read_shift(4); | ||||
| 	var Props = [], i = 0; | ||||
| 	var CodePage = 0; | ||||
| 	var Dictionary = -1, DictObj/*{[number]:string}*/ = ({}/*:any*/); | ||||
| 	var Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/); | ||||
| 	for(i = 0; i != NumProps; ++i) { | ||||
| 		var PropID = blob.read_shift(4); | ||||
| 		var Offset = blob.read_shift(4); | ||||
|  | ||||
| @ -557,6 +557,7 @@ function parse_FormulaValue(blob) { | ||||
| 
 | ||||
| /* 2.5.198.103 */ | ||||
| function parse_RgbExtra(blob, length, rgce, opts) { | ||||
| 	if(opts.biff < 8) return parsenoop(blob, length); | ||||
| 	var target = blob.l + length; | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i !== rgce.length; ++i) { | ||||
| @ -624,7 +625,6 @@ function parse_ArrayParsedFormula(blob, length, opts, ref) { | ||||
| } | ||||
| 
 | ||||
| /* 2.5.198.104 */ | ||||
| var gcnt = 0; | ||||
| function parse_Rgce(blob, length, opts) { | ||||
| 	var target = blob.l + length; | ||||
| 	var R, id, ptgs = []; | ||||
| @ -892,6 +892,7 @@ function stringify_formula(formula, range, cell, supbooks, opts) { | ||||
| 
 | ||||
| 			/* 2.5.198.38 */ | ||||
| 			case 'PtgAttrSpace': | ||||
| 			/* 2.5.198.39 */ | ||||
| 			case 'PtgAttrSpaceSemi': | ||||
| 				last_sp = ff; | ||||
| 				break; | ||||
|  | ||||
| @ -701,7 +701,7 @@ function parse_xlml_xml(d, opts) { | ||||
| 			} | ||||
| 			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|"); | ||||
| 	} | ||||
| 	var out = ({}/*:Any*/); | ||||
| 	var out = ({}/*:any*/); | ||||
| 	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets; | ||||
| 	out.SheetNames = sheetnames; | ||||
| 	out.SSF = SSF.get_table(); | ||||
|  | ||||
| @ -160,6 +160,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; | ||||
| 		var R = XLSRecordEnum[RecordType]; | ||||
| 		//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);
 | ||||
| 		//if(!R) console.log(blob.slice(blob.l, blob.l + length));
 | ||||
| 		if(R && R.f) { | ||||
| 			if(options.bookSheets) { | ||||
| 				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break; | ||||
| @ -253,12 +254,13 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 				} break; | ||||
| 				case 'BOF': { | ||||
| 					if(opts.biff !== 8){} | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0009) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0209) opts.biff = 3; | ||||
| 					else if(RecordType  === 0x0409) opts.biff = 4; | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0600) opts.biff = 8; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					if(file_depth++) break; | ||||
| 					cell_valid = true; | ||||
| 					out = {}; | ||||
|  | ||||
| @ -1,16 +1,21 @@ | ||||
| /* Helper functions to call out to ODS */ | ||||
| 
 | ||||
| function get_ods() { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./ods.js'); | ||||
| 	return ODS; | ||||
| } | ||||
| function parse_ods(zip, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_ods(zip, opts); | ||||
| } | ||||
| function write_ods(wb, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.write_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.write_ods(wb, opts); | ||||
| } | ||||
| function parse_fods(data, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_fods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_fods(data, opts); | ||||
| } | ||||
|  | ||||
| @ -10,13 +10,20 @@ function unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\$([A-Z]) | ||||
| 
 | ||||
| function split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); } | ||||
| function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; } | ||||
| function encode_cell(cell/*:Cell*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); } | ||||
| function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); } | ||||
| function fix_cell(cstr/*:string*/)/*:string*/ { return fix_col(fix_row(cstr)); } | ||||
| function unfix_cell(cstr/*:string*/)/*:string*/ { return unfix_col(unfix_row(cstr)); } | ||||
| function decode_range(range/*:string*/)/*:Range*/ { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } | ||||
| function encode_range(cs/*:any*/,ce/*:?any*/)/*:string*/ { | ||||
| 	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e); | ||||
| 	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce); | ||||
| 	if(typeof ce === 'undefined' || typeof ce === 'number') { | ||||
| /*:: if(!(cs instanceof Range)) throw "unreachable"; */ | ||||
| 		return encode_range(cs.s, cs.e); | ||||
| 	} | ||||
| /*:: if((cs instanceof Range)) throw "unreachable"; */ | ||||
| 	if(typeof cs !== 'string') cs = encode_cell((cs/*:any*/)); | ||||
| 	if(typeof ce !== 'string') ce = encode_cell((ce/*:any*/)); | ||||
| /*:: if(typeof cs !== 'string') throw "unreachable"; */ | ||||
| /*:: if(typeof ce !== 'string') throw "unreachable"; */ | ||||
| 	return cs == ce ? cs : cs + ":" + ce; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								demos/browserify/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								demos/browserify/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| browserify.js | ||||
| browserify.min.js | ||||
							
								
								
									
										10
									
								
								demos/browserify/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								demos/browserify/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| TOOL=browserify | ||||
| .PHONY: all | ||||
| all: $(TOOL).min.js | ||||
| 
 | ||||
| $(TOOL).min.js: $(TOOL).js | ||||
| 	uglifyjs $< > $@ | ||||
| 
 | ||||
| .PHONY: $(TOOL).js | ||||
| $(TOOL).js: | ||||
| 	browserify -r './main.js:xlsx' > $@ | ||||
							
								
								
									
										278
									
								
								demos/browserify/browserify.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										278
									
								
								demos/browserify/browserify.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,278 @@ | ||||
| <!DOCTYPE html> | ||||
| <!-- xlsx.js (C) 2013-present  SheetJS http://sheetjs.com --> | ||||
| <!-- vim: set ts=2: --> | ||||
| <html> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | ||||
| <title>JS-XLSX Live Demo</title> | ||||
| <style> | ||||
| #drop{ | ||||
| 	border:2px dashed #bbb; | ||||
| 	-moz-border-radius:5px; | ||||
| 	-webkit-border-radius:5px; | ||||
| 	border-radius:5px; | ||||
| 	padding:25px; | ||||
| 	text-align:center; | ||||
| 	font:20pt bold,"Vollkorn";color:#bbb | ||||
| } | ||||
| #b64data{ | ||||
| 	width:100%; | ||||
| } | ||||
| </style> | ||||
| </head> | ||||
| <body> | ||||
| <b>JS-XLSX Live Demo</b><br /> | ||||
| Output Format: | ||||
| <select name="format"> | ||||
| <option value="csv" selected> CSV</option> | ||||
| <option value="json"> JSON</option> | ||||
| <option value="form"> FORMULAE</option> | ||||
| </select><br /> | ||||
| 
 | ||||
| <div id="drop">Drop a spreadsheet file here to see sheet data</div> | ||||
| <p><input type="file" name="xlfile" id="xlf" /> ... or click here to select a file</p> | ||||
| <textarea id="b64data">... or paste a base64-encoding here</textarea> | ||||
| <input type="button" id="dotext" value="Click here to process the base64 text" onclick="b64it();"/><br /> | ||||
| Advanced Demo Options: <br /> | ||||
| Use Web Workers: (when available) <input type="checkbox" name="useworker" checked><br /> | ||||
| Use Transferrables: (when available) <input type="checkbox" name="xferable" checked><br /> | ||||
| Use readAsBinaryString: (when available) <input type="checkbox" name="userabs" checked><br /> | ||||
| <pre id="out"></pre> | ||||
| <br /> | ||||
| <script src="browserify.min.js"></script> | ||||
| <script> | ||||
| var X = require('xlsx'); | ||||
| var XW = { | ||||
| 	/* worker message */ | ||||
| 	msg: 'xlsx', | ||||
| 	/* worker scripts */ | ||||
| 	rABS: './xlsxworker2.js', | ||||
| 	norABS: './xlsxworker1.js', | ||||
| 	noxfer: './xlsxworker.js' | ||||
| }; | ||||
| 
 | ||||
| var rABS = typeof FileReader !== "undefined" && typeof FileReader.prototype !== "undefined" && typeof FileReader.prototype.readAsBinaryString !== "undefined"; | ||||
| if(!rABS) { | ||||
| 	document.getElementsByName("userabs")[0].disabled = true; | ||||
| 	document.getElementsByName("userabs")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var use_worker = typeof Worker !== 'undefined'; | ||||
| if(!use_worker) { | ||||
| 	document.getElementsByName("useworker")[0].disabled = true; | ||||
| 	document.getElementsByName("useworker")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var transferable = use_worker; | ||||
| if(!transferable) { | ||||
| 	document.getElementsByName("xferable")[0].disabled = true; | ||||
| 	document.getElementsByName("xferable")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var wtf_mode = false; | ||||
| 
 | ||||
| function fixdata(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
| 	var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
| 	for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
| 	return [v, b]; | ||||
| } | ||||
| 
 | ||||
| function xw_noxfer(data, cb) { | ||||
| 	var worker = new Worker(XW.noxfer); | ||||
| 	worker.onmessage = function(e) { | ||||
| 		switch(e.data.t) { | ||||
| 			case 'ready': break; | ||||
| 			case 'e': console.error(e.data.d); break; | ||||
| 			case XW.msg: cb(JSON.parse(e.data.d)); break; | ||||
| 		} | ||||
| 	}; | ||||
| 	var arr = rABS ? data : btoa(fixdata(data)); | ||||
| 	worker.postMessage({d:arr,b:rABS}); | ||||
| } | ||||
| 
 | ||||
| function xw_xfer(data, cb) { | ||||
| 	var worker = new Worker(rABS ? XW.rABS : XW.norABS); | ||||
| 	worker.onmessage = function(e) { | ||||
| 		switch(e.data.t) { | ||||
| 			case 'ready': break; | ||||
| 			case 'e': console.error(e.data.d); break; | ||||
| 			default: xx=ab2str(e.data).replace(/\n/g,"\\n").replace(/\r/g,"\\r"); console.log("done"); cb(JSON.parse(xx)); break; | ||||
| 		} | ||||
| 	}; | ||||
| 	if(rABS) { | ||||
| 		var val = s2ab(data); | ||||
| 		worker.postMessage(val[1], [val[1]]); | ||||
| 	} else { | ||||
| 		worker.postMessage(data, [data]); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function xw(data, cb) { | ||||
| 	transferable = document.getElementsByName("xferable")[0].checked; | ||||
| 	if(transferable) xw_xfer(data, cb); | ||||
| 	else xw_noxfer(data, cb); | ||||
| } | ||||
| 
 | ||||
| function get_radio_value( radioName ) { | ||||
| 	var radios = document.getElementsByName( radioName ); | ||||
| 	for( var i = 0; i < radios.length; i++ ) { | ||||
| 		if( radios[i].checked || radios.length === 1 ) { | ||||
| 			return radios[i].value; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function to_json(workbook) { | ||||
| 	var result = {}; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var roa = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); | ||||
| 		if(roa.length > 0){ | ||||
| 			result[sheetName] = roa; | ||||
| 		} | ||||
| 	}); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| function to_csv(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var csv = X.utils.sheet_to_csv(workbook.Sheets[sheetName]); | ||||
| 		if(csv.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(csv); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| function to_formulae(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var formulae = X.utils.get_formulae(workbook.Sheets[sheetName]); | ||||
| 		if(formulae.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(formulae.join("\n")); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| var tarea = document.getElementById('b64data'); | ||||
| function b64it() { | ||||
| 	if(typeof console !== 'undefined') console.log("onload", new Date()); | ||||
| 	var wb = X.read(tarea.value, {type: 'base64',WTF:wtf_mode}); | ||||
| 	process_wb(wb); | ||||
| } | ||||
| 
 | ||||
| function process_wb(wb) { | ||||
| 	var output = ""; | ||||
| 	switch(get_radio_value("format")) { | ||||
| 		case "json": | ||||
| 			output = JSON.stringify(to_json(wb), 2, 2); | ||||
| 			break; | ||||
| 		case "form": | ||||
| 			output = to_formulae(wb); | ||||
| 			break; | ||||
| 		default: | ||||
| 			output = to_csv(wb); | ||||
| 	} | ||||
| 	if(out.innerText === undefined) out.textContent = output; | ||||
| 	else out.innerText = output; | ||||
| 	if(typeof console !== 'undefined') console.log("output", new Date()); | ||||
| } | ||||
| 
 | ||||
| var drop = document.getElementById('drop'); | ||||
| function handleDrop(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	use_worker = document.getElementsByName("useworker")[0].checked; | ||||
| 	var files = e.dataTransfer.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker); | ||||
| 			var data = e.target.result; | ||||
| 			if(use_worker) { | ||||
| 				xw(data, process_wb); | ||||
| 			} else { | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function handleDragover(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	e.dataTransfer.dropEffect = 'copy'; | ||||
| } | ||||
| 
 | ||||
| if(drop.addEventListener) { | ||||
| 	drop.addEventListener('dragenter', handleDragover, false); | ||||
| 	drop.addEventListener('dragover', handleDragover, false); | ||||
| 	drop.addEventListener('drop', handleDrop, false); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| var xlf = document.getElementById('xlf'); | ||||
| function handleFile(e) { | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	use_worker = document.getElementsByName("useworker")[0].checked; | ||||
| 	var files = e.target.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker); | ||||
| 			var data = e.target.result; | ||||
| 			if(use_worker) { | ||||
| 				xw(data, process_wb); | ||||
| 			} else { | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false); | ||||
| </script> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										3
									
								
								demos/browserify/main.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								demos/browserify/main.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| var XLSX = require('../../'); // test against development version
 | ||||
| //var XLSX = require('xlsx'); // use in production
 | ||||
| module.exports = XLSX; | ||||
							
								
								
									
										12
									
								
								demos/browserify/xlsxworker.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								demos/browserify/xlsxworker.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('browserify.min.js'); | ||||
| var XLSX = require('xlsx'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(oEvent.data.d, {type: oEvent.data.b ? 'binary' : 'base64'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack||e}); } | ||||
| postMessage({t:"xlsx", d:JSON.stringify(v)}); | ||||
| }; | ||||
							
								
								
									
										27
									
								
								demos/browserify/xlsxworker1.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										27
									
								
								demos/browserify/xlsxworker1.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('browserify.min.js'); | ||||
| var XLSX = require('xlsx'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
|   var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
|   for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
|   return [v, b]; | ||||
| } | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(ab2str(oEvent.data), {type: 'binary'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack}); } | ||||
|   var res = {t:"xlsx", d:JSON.stringify(v)}; | ||||
|   var r = s2ab(res.d)[1]; | ||||
| postMessage(r, [r]); | ||||
| }; | ||||
							
								
								
									
										27
									
								
								demos/browserify/xlsxworker2.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										27
									
								
								demos/browserify/xlsxworker2.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('browserify.min.js'); | ||||
| var XLSX = require('xlsx'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
|   var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
|   for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
|   return [v, b]; | ||||
| } | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(ab2str(oEvent.data), {type: 'binary'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack}); } | ||||
|   var res = {t:"xlsx", d:JSON.stringify(v)}; | ||||
|   var r = s2ab(res.d)[1]; | ||||
| postMessage(r, [r]); | ||||
| }; | ||||
							
								
								
									
										4
									
								
								demos/requirejs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										4
									
								
								demos/requirejs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| xlsx.full* | ||||
| r.js | ||||
| require.js | ||||
| requirejs-built.js | ||||
							
								
								
									
										9
									
								
								demos/requirejs/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										9
									
								
								demos/requirejs/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| TOOL=requirejs | ||||
| .PHONY: all | ||||
| all: $(TOOL).js | ||||
| 
 | ||||
| .PHONY: $(TOOL).js | ||||
| $(TOOL).js: | ||||
| 	if [ ! -e require.js ]; then curl -O http://requirejs.org/docs/release/2.3.3/comments/require.js; fi | ||||
| 	if [ ! -e r.js ]; then curl -O http://requirejs.org/docs/release/2.3.3/r.js; fi | ||||
| 	node r.js -o build.js | ||||
							
								
								
									
										5
									
								
								demos/requirejs/build.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										5
									
								
								demos/requirejs/build.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| ({ | ||||
| 	baseUrl: ".", | ||||
| 	name: "requirejs", | ||||
| 	out: "requirejs-built.js" | ||||
| }) | ||||
							
								
								
									
										173
									
								
								demos/requirejs/requirejs.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										173
									
								
								demos/requirejs/requirejs.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,173 @@ | ||||
| require(["xlsx.full"], function(_XLSX) { | ||||
| var X = XLSX; | ||||
| 
 | ||||
| var rABS = typeof FileReader !== "undefined" && typeof FileReader.prototype !== "undefined" && typeof FileReader.prototype.readAsBinaryString !== "undefined"; | ||||
| if(!rABS) { | ||||
| 	document.getElementsByName("userabs")[0].disabled = true; | ||||
| 	document.getElementsByName("userabs")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var wtf_mode = false; | ||||
| 
 | ||||
| function fixdata(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
| 	var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
| 	for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
| 	return [v, b]; | ||||
| } | ||||
| 
 | ||||
| function get_radio_value( radioName ) { | ||||
| 	var radios = document.getElementsByName( radioName ); | ||||
| 	for( var i = 0; i < radios.length; i++ ) { | ||||
| 		if( radios[i].checked || radios.length === 1 ) { | ||||
| 			return radios[i].value; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function to_json(workbook) { | ||||
| 	var result = {}; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var roa = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); | ||||
| 		if(roa.length > 0){ | ||||
| 			result[sheetName] = roa; | ||||
| 		} | ||||
| 	}); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| function to_csv(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var csv = X.utils.sheet_to_csv(workbook.Sheets[sheetName]); | ||||
| 		if(csv.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(csv); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| function to_formulae(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var formulae = X.utils.get_formulae(workbook.Sheets[sheetName]); | ||||
| 		if(formulae.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(formulae.join("\n")); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| var tarea = document.getElementById('b64data'); | ||||
| function b64it() { | ||||
| 	if(typeof console !== 'undefined') console.log("onload", new Date()); | ||||
| 	var wb = X.read(tarea.value, {type: 'base64',WTF:wtf_mode}); | ||||
| 	process_wb(wb); | ||||
| } | ||||
| 
 | ||||
| function process_wb(wb) { | ||||
| 	var output = ""; | ||||
| 	switch(get_radio_value("format")) { | ||||
| 		case "json": | ||||
| 			output = JSON.stringify(to_json(wb), 2, 2); | ||||
| 			break; | ||||
| 		case "form": | ||||
| 			output = to_formulae(wb); | ||||
| 			break; | ||||
| 		default: | ||||
| 			output = to_csv(wb); | ||||
| 	} | ||||
| 	if(out.innerText === undefined) out.textContent = output; | ||||
| 	else out.innerText = output; | ||||
| 	if(typeof console !== 'undefined') console.log("output", new Date()); | ||||
| } | ||||
| 
 | ||||
| var drop = document.getElementById('drop'); | ||||
| function handleDrop(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	var files = e.dataTransfer.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS); | ||||
| 			var data = e.target.result; | ||||
| 			{ | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function handleDragover(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	e.dataTransfer.dropEffect = 'copy'; | ||||
| } | ||||
| 
 | ||||
| if(drop.addEventListener) { | ||||
| 	drop.addEventListener('dragenter', handleDragover, false); | ||||
| 	drop.addEventListener('dragover', handleDragover, false); | ||||
| 	drop.addEventListener('drop', handleDrop, false); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| var xlf = document.getElementById('xlf'); | ||||
| function handleFile(e) { | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	var files = e.target.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS); | ||||
| 			var data = e.target.result; | ||||
| 			{ | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false); | ||||
| 
 | ||||
| }); | ||||
							
								
								
									
										2
									
								
								demos/webpack/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								demos/webpack/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| webpack.js | ||||
| webpack.min.js | ||||
							
								
								
									
										10
									
								
								demos/webpack/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								demos/webpack/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| TOOL=webpack | ||||
| .PHONY: all | ||||
| all: $(TOOL).min.js | ||||
| 
 | ||||
| $(TOOL).min.js: $(TOOL).js | ||||
| 	uglifyjs $< > $@ | ||||
| 
 | ||||
| .PHONY: $(TOOL).js | ||||
| $(TOOL).js: | ||||
| 	webpack main.js --output-filename $@ --display-modules | ||||
							
								
								
									
										3
									
								
								demos/webpack/main.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								demos/webpack/main.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| var XLSX = require('../../'); | ||||
| console.log("it works!"); | ||||
| module.exports = XLSX; | ||||
							
								
								
									
										19
									
								
								demos/webpack/webpack.config.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										19
									
								
								demos/webpack/webpack.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| module.exports = { | ||||
| 	output: { | ||||
| 		libraryTarget: 'var', | ||||
| 		library: 'XLSX' | ||||
| 	}, | ||||
| 	module: { | ||||
| 		noParse: [/jszip.js$/] | ||||
| 	}, | ||||
| 	node: { | ||||
| 		fs: false, | ||||
| 		Buffer: false | ||||
| 	}, | ||||
| 	externals: [ | ||||
| 		{ | ||||
| 			'./cptable': 'var cptable', | ||||
| 			'../xlsx.js': 'var _XLSX' | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
							
								
								
									
										278
									
								
								demos/webpack/webpack.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										278
									
								
								demos/webpack/webpack.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,278 @@ | ||||
| <!DOCTYPE html> | ||||
| <!-- xlsx.js (C) 2013-present  SheetJS http://sheetjs.com --> | ||||
| <!-- vim: set ts=2: --> | ||||
| <html> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | ||||
| <title>JS-XLSX Live Demo</title> | ||||
| <style> | ||||
| #drop{ | ||||
| 	border:2px dashed #bbb; | ||||
| 	-moz-border-radius:5px; | ||||
| 	-webkit-border-radius:5px; | ||||
| 	border-radius:5px; | ||||
| 	padding:25px; | ||||
| 	text-align:center; | ||||
| 	font:20pt bold,"Vollkorn";color:#bbb | ||||
| } | ||||
| #b64data{ | ||||
| 	width:100%; | ||||
| } | ||||
| </style> | ||||
| </head> | ||||
| <body> | ||||
| <b>JS-XLSX Live Demo</b><br /> | ||||
| Output Format: | ||||
| <select name="format"> | ||||
| <option value="csv" selected> CSV</option> | ||||
| <option value="json"> JSON</option> | ||||
| <option value="form"> FORMULAE</option> | ||||
| </select><br /> | ||||
| 
 | ||||
| <div id="drop">Drop a spreadsheet file here to see sheet data</div> | ||||
| <p><input type="file" name="xlfile" id="xlf" /> ... or click here to select a file</p> | ||||
| <textarea id="b64data">... or paste a base64-encoding here</textarea> | ||||
| <input type="button" id="dotext" value="Click here to process the base64 text" onclick="b64it();"/><br /> | ||||
| Advanced Demo Options: <br /> | ||||
| Use Web Workers: (when available) <input type="checkbox" name="useworker" checked><br /> | ||||
| Use Transferrables: (when available) <input type="checkbox" name="xferable" checked><br /> | ||||
| Use readAsBinaryString: (when available) <input type="checkbox" name="userabs" checked><br /> | ||||
| <pre id="out"></pre> | ||||
| <br /> | ||||
| <script src="webpack.min.js"></script> | ||||
| <script> | ||||
| var X = XLSX; | ||||
| var XW = { | ||||
| 	/* worker message */ | ||||
| 	msg: 'xlsx', | ||||
| 	/* worker scripts */ | ||||
| 	rABS: './xlsxworker2.js', | ||||
| 	norABS: './xlsxworker1.js', | ||||
| 	noxfer: './xlsxworker.js' | ||||
| }; | ||||
| 
 | ||||
| var rABS = typeof FileReader !== "undefined" && typeof FileReader.prototype !== "undefined" && typeof FileReader.prototype.readAsBinaryString !== "undefined"; | ||||
| if(!rABS) { | ||||
| 	document.getElementsByName("userabs")[0].disabled = true; | ||||
| 	document.getElementsByName("userabs")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var use_worker = typeof Worker !== 'undefined'; | ||||
| if(!use_worker) { | ||||
| 	document.getElementsByName("useworker")[0].disabled = true; | ||||
| 	document.getElementsByName("useworker")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var transferable = use_worker; | ||||
| if(!transferable) { | ||||
| 	document.getElementsByName("xferable")[0].disabled = true; | ||||
| 	document.getElementsByName("xferable")[0].checked = false; | ||||
| } | ||||
| 
 | ||||
| var wtf_mode = false; | ||||
| 
 | ||||
| function fixdata(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
| 	var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
| 	for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
| 	return [v, b]; | ||||
| } | ||||
| 
 | ||||
| function xw_noxfer(data, cb) { | ||||
| 	var worker = new Worker(XW.noxfer); | ||||
| 	worker.onmessage = function(e) { | ||||
| 		switch(e.data.t) { | ||||
| 			case 'ready': break; | ||||
| 			case 'e': console.error(e.data.d); break; | ||||
| 			case XW.msg: cb(JSON.parse(e.data.d)); break; | ||||
| 		} | ||||
| 	}; | ||||
| 	var arr = rABS ? data : btoa(fixdata(data)); | ||||
| 	worker.postMessage({d:arr,b:rABS}); | ||||
| } | ||||
| 
 | ||||
| function xw_xfer(data, cb) { | ||||
| 	var worker = new Worker(rABS ? XW.rABS : XW.norABS); | ||||
| 	worker.onmessage = function(e) { | ||||
| 		switch(e.data.t) { | ||||
| 			case 'ready': break; | ||||
| 			case 'e': console.error(e.data.d); break; | ||||
| 			default: xx=ab2str(e.data).replace(/\n/g,"\\n").replace(/\r/g,"\\r"); console.log("done"); cb(JSON.parse(xx)); break; | ||||
| 		} | ||||
| 	}; | ||||
| 	if(rABS) { | ||||
| 		var val = s2ab(data); | ||||
| 		worker.postMessage(val[1], [val[1]]); | ||||
| 	} else { | ||||
| 		worker.postMessage(data, [data]); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function xw(data, cb) { | ||||
| 	transferable = document.getElementsByName("xferable")[0].checked; | ||||
| 	if(transferable) xw_xfer(data, cb); | ||||
| 	else xw_noxfer(data, cb); | ||||
| } | ||||
| 
 | ||||
| function get_radio_value( radioName ) { | ||||
| 	var radios = document.getElementsByName( radioName ); | ||||
| 	for( var i = 0; i < radios.length; i++ ) { | ||||
| 		if( radios[i].checked || radios.length === 1 ) { | ||||
| 			return radios[i].value; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function to_json(workbook) { | ||||
| 	var result = {}; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var roa = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]); | ||||
| 		if(roa.length > 0){ | ||||
| 			result[sheetName] = roa; | ||||
| 		} | ||||
| 	}); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| function to_csv(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var csv = X.utils.sheet_to_csv(workbook.Sheets[sheetName]); | ||||
| 		if(csv.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(csv); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| function to_formulae(workbook) { | ||||
| 	var result = []; | ||||
| 	workbook.SheetNames.forEach(function(sheetName) { | ||||
| 		var formulae = X.utils.get_formulae(workbook.Sheets[sheetName]); | ||||
| 		if(formulae.length > 0){ | ||||
| 			result.push("SHEET: " + sheetName); | ||||
| 			result.push(""); | ||||
| 			result.push(formulae.join("\n")); | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.join("\n"); | ||||
| } | ||||
| 
 | ||||
| var tarea = document.getElementById('b64data'); | ||||
| function b64it() { | ||||
| 	if(typeof console !== 'undefined') console.log("onload", new Date()); | ||||
| 	var wb = X.read(tarea.value, {type: 'base64',WTF:wtf_mode}); | ||||
| 	process_wb(wb); | ||||
| } | ||||
| 
 | ||||
| function process_wb(wb) { | ||||
| 	var output = ""; | ||||
| 	switch(get_radio_value("format")) { | ||||
| 		case "json": | ||||
| 			output = JSON.stringify(to_json(wb), 2, 2); | ||||
| 			break; | ||||
| 		case "form": | ||||
| 			output = to_formulae(wb); | ||||
| 			break; | ||||
| 		default: | ||||
| 			output = to_csv(wb); | ||||
| 	} | ||||
| 	if(out.innerText === undefined) out.textContent = output; | ||||
| 	else out.innerText = output; | ||||
| 	if(typeof console !== 'undefined') console.log("output", new Date()); | ||||
| } | ||||
| 
 | ||||
| var drop = document.getElementById('drop'); | ||||
| function handleDrop(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	use_worker = document.getElementsByName("useworker")[0].checked; | ||||
| 	var files = e.dataTransfer.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker); | ||||
| 			var data = e.target.result; | ||||
| 			if(use_worker) { | ||||
| 				xw(data, process_wb); | ||||
| 			} else { | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function handleDragover(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	e.preventDefault(); | ||||
| 	e.dataTransfer.dropEffect = 'copy'; | ||||
| } | ||||
| 
 | ||||
| if(drop.addEventListener) { | ||||
| 	drop.addEventListener('dragenter', handleDragover, false); | ||||
| 	drop.addEventListener('dragover', handleDragover, false); | ||||
| 	drop.addEventListener('drop', handleDrop, false); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| var xlf = document.getElementById('xlf'); | ||||
| function handleFile(e) { | ||||
| 	rABS = document.getElementsByName("userabs")[0].checked; | ||||
| 	use_worker = document.getElementsByName("useworker")[0].checked; | ||||
| 	var files = e.target.files; | ||||
| 	var f = files[0]; | ||||
| 	{ | ||||
| 		var reader = new FileReader(); | ||||
| 		var name = f.name; | ||||
| 		reader.onload = function(e) { | ||||
| 			if(typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker); | ||||
| 			var data = e.target.result; | ||||
| 			if(use_worker) { | ||||
| 				xw(data, process_wb); | ||||
| 			} else { | ||||
| 				var wb; | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(rABS) reader.readAsBinaryString(f); | ||||
| 		else reader.readAsArrayBuffer(f); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false); | ||||
| </script> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										11
									
								
								demos/webpack/xlsxworker.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										11
									
								
								demos/webpack/xlsxworker.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('webpack.min.js'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(oEvent.data.d, {type: oEvent.data.b ? 'binary' : 'base64'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack||e}); } | ||||
| postMessage({t:"xlsx", d:JSON.stringify(v)}); | ||||
| }; | ||||
							
								
								
									
										26
									
								
								demos/webpack/xlsxworker1.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										26
									
								
								demos/webpack/xlsxworker1.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('webpack.min.js'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
|   var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
|   for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
|   return [v, b]; | ||||
| } | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(ab2str(oEvent.data), {type: 'binary'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack}); } | ||||
|   var res = {t:"xlsx", d:JSON.stringify(v)}; | ||||
|   var r = s2ab(res.d)[1]; | ||||
| postMessage(r, [r]); | ||||
| }; | ||||
							
								
								
									
										26
									
								
								demos/webpack/xlsxworker2.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										26
									
								
								demos/webpack/xlsxworker2.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||||
| importScripts('webpack.min.js'); | ||||
| postMessage({t:"ready"}); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function s2ab(s) { | ||||
|   var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b); | ||||
|   for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i); | ||||
|   return [v, b]; | ||||
| } | ||||
| 
 | ||||
| onmessage = function (oEvent) { | ||||
|   var v; | ||||
|   try { | ||||
|     v = XLSX.read(ab2str(oEvent.data), {type: 'binary'}); | ||||
|   } catch(e) { postMessage({t:"e",d:e.stack}); } | ||||
|   var res = {t:"xlsx", d:JSON.stringify(v)}; | ||||
|   var r = s2ab(res.d)[1]; | ||||
| postMessage(r, [r]); | ||||
| }; | ||||
							
								
								
									
										2
									
								
								dist/jszip.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/jszip.js
									
									
									
									
										vendored
									
									
								
							| @ -9,7 +9,7 @@ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/js | ||||
| JSZip uses the library pako released under the MIT license : | ||||
| https://github.com/nodeca/pako/blob/master/LICENSE
 | ||||
| */ | ||||
| !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||||
| !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd){JSZip=e();define([],e);}else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||||
| 'use strict'; | ||||
| // private property
 | ||||
| var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | ||||
|  | ||||
							
								
								
									
										15
									
								
								dist/ods.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								dist/ods.js
									
									
									
									
										vendored
									
									
								
							| @ -7,10 +7,9 @@ var ODS = {}; | ||||
| var get_utils = function() { | ||||
| 	if(typeof XLSX !== 'undefined') return XLSX.utils; | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined') try { | ||||
| 		return require('../' + 'xlsx').utils; | ||||
| 		return require('../xlsx.js').utils; | ||||
| 	} catch(e) { | ||||
| 		try { return require('./' + 'xlsx').utils; } | ||||
| 		catch(ee) { return require('xl' + 'sx').utils; } | ||||
| 		return require('./xlsx.js').utils; | ||||
| 	} | ||||
| 	throw new Error("Cannot find XLSX utils"); | ||||
| }; | ||||
| @ -29,7 +28,7 @@ function dup(o) { | ||||
| 	for(var k in o) if(o.hasOwnProperty(k)) out[k] = dup(o[k]); | ||||
| 	return out; | ||||
| } | ||||
| function getdata(data) { | ||||
| function getdatastr(data) { | ||||
| 	if(!data) return null; | ||||
| 	if(data.data) return data.data; | ||||
| 	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary'); | ||||
| @ -38,6 +37,10 @@ function getdata(data) { | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| /* ODS and friends only use text files in container */ | ||||
| function getdata(data) { return getdatastr(data); } | ||||
| 
 | ||||
| /* NOTE: unlike ECMA-376, OASIS does not comment on filename case sensitivity */ | ||||
| function safegetzipfile(zip, file) { | ||||
| 	var f = file; if(zip.files[f]) return zip.files[f]; | ||||
| 	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f]; | ||||
| @ -61,8 +64,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/[^\s?>\/]+=["'][^"]*['"]/g; | ||||
|  | ||||
							
								
								
									
										2
									
								
								dist/ods.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/ods.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/ods.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/ods.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										22
									
								
								dist/xlsx.core.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										22
									
								
								dist/xlsx.core.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										23
									
								
								dist/xlsx.full.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										23
									
								
								dist/xlsx.full.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										45
									
								
								dist/xlsx.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										45
									
								
								dist/xlsx.js
									
									
									
									
										vendored
									
									
								
							| @ -4,10 +4,10 @@ | ||||
| /*jshint funcscope:true, eqnull:true */ | ||||
| var XLSX = {}; | ||||
| (function make_xlsx(XLSX){ | ||||
| XLSX.version = '0.8.6'; | ||||
| XLSX.version = '0.8.7'; | ||||
| var current_codepage = 1200, current_cptable; | ||||
| if(typeof module !== "undefined" && typeof require !== 'undefined') { | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel'); | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel.js'); | ||||
| 	current_cptable = cptable[current_codepage]; | ||||
| } | ||||
| function reset_cp() { set_cp(1200); } | ||||
| @ -1377,8 +1377,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; | ||||
| @ -1847,7 +1847,7 @@ var make_offcrypto = function(O, _crypto) { | ||||
| 	var crypto; | ||||
| 	if(typeof _crypto !== 'undefined') crypto = _crypto; | ||||
| 	else if(typeof require !== 'undefined') { | ||||
| 		try { crypto = require('cry'+'pto'); } | ||||
| 		try { crypto = require('crypto'); } | ||||
| 		catch(e) { crypto = null; } | ||||
| 	} | ||||
| 
 | ||||
| @ -2933,7 +2933,7 @@ function parse_VtVecHeadingPair(blob) { | ||||
| /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ | ||||
| function parse_dictionary(blob,CodePage) { | ||||
| 	var cnt = blob.read_shift(4); | ||||
| 	var dict/*{[number]:string}*/ = ({}); | ||||
| 	var dict = ({}); | ||||
| 	for(var j = 0; j != cnt; ++j) { | ||||
| 		var pid = blob.read_shift(4); | ||||
| 		var len = blob.read_shift(4); | ||||
| @ -3014,7 +3014,7 @@ function parse_PropertySet(blob, PIDSI) { | ||||
| 	var NumProps = blob.read_shift(4); | ||||
| 	var Props = [], i = 0; | ||||
| 	var CodePage = 0; | ||||
| 	var Dictionary = -1, DictObj/*{[number]:string}*/ = ({}); | ||||
| 	var Dictionary = -1, DictObj = ({}); | ||||
| 	for(i = 0; i != NumProps; ++i) { | ||||
| 		var PropID = blob.read_shift(4); | ||||
| 		var Offset = blob.read_shift(4); | ||||
| @ -6215,6 +6215,7 @@ function parse_FormulaValue(blob) { | ||||
| 
 | ||||
| /* 2.5.198.103 */ | ||||
| function parse_RgbExtra(blob, length, rgce, opts) { | ||||
| 	if(opts.biff < 8) return parsenoop(blob, length); | ||||
| 	var target = blob.l + length; | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i !== rgce.length; ++i) { | ||||
| @ -6282,7 +6283,6 @@ function parse_ArrayParsedFormula(blob, length, opts, ref) { | ||||
| } | ||||
| 
 | ||||
| /* 2.5.198.104 */ | ||||
| var gcnt = 0; | ||||
| function parse_Rgce(blob, length, opts) { | ||||
| 	var target = blob.l + length; | ||||
| 	var R, id, ptgs = []; | ||||
| @ -6550,6 +6550,7 @@ function stringify_formula(formula, range, cell, supbooks, opts) { | ||||
| 
 | ||||
| 			/* 2.5.198.38 */ | ||||
| 			case 'PtgAttrSpace': | ||||
| 			/* 2.5.198.39 */ | ||||
| 			case 'PtgAttrSpaceSemi': | ||||
| 				last_sp = ff; | ||||
| 				break; | ||||
| @ -10205,6 +10206,7 @@ function parse_workbook(blob, options) { | ||||
| 		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; | ||||
| 		var R = XLSRecordEnum[RecordType]; | ||||
| 		//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);
 | ||||
| 		//if(!R) console.log(blob.slice(blob.l, blob.l + length));
 | ||||
| 		if(R && R.f) { | ||||
| 			if(options.bookSheets) { | ||||
| 				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break; | ||||
| @ -10298,12 +10300,13 @@ function parse_workbook(blob, options) { | ||||
| 				} break; | ||||
| 				case 'BOF': { | ||||
| 					if(opts.biff !== 8){} | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0009) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0209) opts.biff = 3; | ||||
| 					else if(RecordType  === 0x0409) opts.biff = 4; | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0600) opts.biff = 8; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					if(file_depth++) break; | ||||
| 					cell_valid = true; | ||||
| 					out = {}; | ||||
| @ -12107,18 +12110,23 @@ function write_csv_str(wb, o) { | ||||
| 	return sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o); | ||||
| } | ||||
| /* Helper functions to call out to ODS */ | ||||
| 
 | ||||
| function get_ods() { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./ods.js'); | ||||
| 	return ODS; | ||||
| } | ||||
| function parse_ods(zip, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_ods(zip, opts); | ||||
| } | ||||
| function write_ods(wb, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.write_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.write_ods(wb, opts); | ||||
| } | ||||
| function parse_fods(data, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_fods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_fods(data, opts); | ||||
| } | ||||
| @ -12533,9 +12541,12 @@ function fix_cell(cstr) { return fix_col(fix_row(cstr)); } | ||||
| function unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); } | ||||
| function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } | ||||
| function encode_range(cs,ce) { | ||||
| 	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e); | ||||
| 	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce); | ||||
| 	return cs == ce ? cs : cs + ":" + ce; | ||||
| 	if(typeof ce === 'undefined' || typeof ce === 'number') { | ||||
| return encode_range(cs.s, cs.e); | ||||
| 	} | ||||
| if(typeof cs !== 'string') cs = encode_cell((cs)); | ||||
| 	if(typeof ce !== 'string') ce = encode_cell((ce)); | ||||
| return cs == ce ? cs : cs + ":" + ce; | ||||
| } | ||||
| 
 | ||||
| function safe_decode_range(range) { | ||||
|  | ||||
							
								
								
									
										16
									
								
								dist/xlsx.min.js
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										16
									
								
								dist/xlsx.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.min.map
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.min.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										11
									
								
								index.html
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										11
									
								
								index.html
									
									
									
									
									
								
							| @ -21,18 +21,15 @@ | ||||
| </style> | ||||
| </head> | ||||
| <body> | ||||
| <b>JS-XLSX (XLSX/XLSB/XLSM/XLS/XML/ODS) Live Demo</b><br /> | ||||
| <b>JS-XLSX Live Demo</b><br /> | ||||
| Output Format: | ||||
| <select name="format"> | ||||
| <option value="csv" selected> CSV</option> | ||||
| <option value="json"> JSON</option> | ||||
| <option value="form"> FORMULAE</option> | ||||
| </select><br /> | ||||
| <!--<input type="radio" name="format" value="csv" checked> CSV<br> | ||||
| <input type="radio" name="format" value="json"> JSON<br> | ||||
| <input type="radio" name="format" value="form"> FORMULAE<br> --> | ||||
| 
 | ||||
| <div id="drop">Drop an XLSX / XLSM / XLSB / ODS / XLS / XML file here to see sheet data</div> | ||||
| <div id="drop">Drop a spreadsheet file here to see sheet data</div> | ||||
| <p><input type="file" name="xlfile" id="xlf" /> ... or click here to select a file</p> | ||||
| <textarea id="b64data">... or paste a base64-encoding here</textarea> | ||||
| <input type="button" id="dotext" value="Click here to process the base64 text" onclick="b64it();"/><br /> | ||||
| @ -199,7 +196,7 @@ function process_wb(wb) { | ||||
| 			output = to_formulae(wb); | ||||
| 			break; | ||||
| 		default: | ||||
| 		output = to_csv(wb); | ||||
| 			output = to_csv(wb); | ||||
| 	} | ||||
| 	if(out.innerText === undefined) out.textContent = output; | ||||
| 	else out.innerText = output; | ||||
| @ -270,7 +267,7 @@ function handleFile(e) { | ||||
| 				if(rABS) { | ||||
| 					wb = X.read(data, {type: 'binary'}); | ||||
| 				} else { | ||||
| 				var arr = fixdata(data); | ||||
| 					var arr = fixdata(data); | ||||
| 					wb = X.read(btoa(arr), {type: 'base64'}); | ||||
| 				} | ||||
| 				process_wb(wb); | ||||
|  | ||||
							
								
								
									
										2
									
								
								jszip.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								jszip.js
									
									
									
									
									
								
							| @ -9,7 +9,7 @@ Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/js | ||||
| JSZip uses the library pako released under the MIT license : | ||||
| https://github.com/nodeca/pako/blob/master/LICENSE
 | ||||
| */ | ||||
| !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||||
| !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd){JSZip=e();define([],e);}else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||||
| 'use strict'; | ||||
| // private property
 | ||||
| var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | ||||
|  | ||||
							
								
								
									
										21
									
								
								ods.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										21
									
								
								ods.flow.js
									
									
									
									
									
								
							| @ -8,10 +8,9 @@ var ODS = {}; | ||||
| var get_utils = function() { | ||||
| 	if(typeof XLSX !== 'undefined') return XLSX.utils; | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined') try { | ||||
| 		return require('../' + 'xlsx').utils; | ||||
| 		return require('../xlsx.js').utils; | ||||
| 	} catch(e) { | ||||
| 		try { return require('./' + 'xlsx').utils; } | ||||
| 		catch(ee) { return require('xl' + 'sx').utils; } | ||||
| 		return require('./xlsx.js').utils; | ||||
| 	} | ||||
| 	throw new Error("Cannot find XLSX utils"); | ||||
| }; | ||||
| @ -30,7 +29,7 @@ function dup(o/*:any*/)/*:any*/ { | ||||
| 	for(var k in o) if(o.hasOwnProperty(k)) out[k] = dup(o[k]); | ||||
| 	return out; | ||||
| } | ||||
| function getdata(data) { | ||||
| function getdatastr(data)/*:?string*/ { | ||||
| 	if(!data) return null; | ||||
| 	if(data.data) return data.data; | ||||
| 	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary'); | ||||
| @ -39,20 +38,24 @@ function getdata(data) { | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| function safegetzipfile(zip, file) { | ||||
| /* ODS and friends only use text files in container */ | ||||
| function getdata(data) { return getdatastr(data); } | ||||
| 
 | ||||
| /* NOTE: unlike ECMA-376, OASIS does not comment on filename case sensitivity */ | ||||
| function safegetzipfile(zip, file/*:string*/) { | ||||
| 	var f = file; if(zip.files[f]) return zip.files[f]; | ||||
| 	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f]; | ||||
| 	f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f]; | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| function getzipfile(zip, file) { | ||||
| function getzipfile(zip, file/*:string*/) { | ||||
| 	var o = safegetzipfile(zip, file); | ||||
| 	if(o == null) throw new Error("Cannot find file " + file + " in zip"); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function getzipdata(zip, file, safe/*:?boolean*/) { | ||||
| function getzipdata(zip, file/*:string*/, safe/*:?boolean*/) { | ||||
| 	if(!safe) return getdata(getzipfile(zip, file)); | ||||
| 	if(!file) return null; | ||||
| 	try { return getzipdata(zip, file); } catch(e) { return null; } | ||||
| @ -63,8 +66,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/[^\s?>\/]+=["'][^"]*['"]/g; | ||||
|  | ||||
							
								
								
									
										15
									
								
								ods.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								ods.js
									
									
									
									
									
								
							| @ -7,10 +7,9 @@ var ODS = {}; | ||||
| var get_utils = function() { | ||||
| 	if(typeof XLSX !== 'undefined') return XLSX.utils; | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined') try { | ||||
| 		return require('../' + 'xlsx').utils; | ||||
| 		return require('../xlsx.js').utils; | ||||
| 	} catch(e) { | ||||
| 		try { return require('./' + 'xlsx').utils; } | ||||
| 		catch(ee) { return require('xl' + 'sx').utils; } | ||||
| 		return require('./xlsx.js').utils; | ||||
| 	} | ||||
| 	throw new Error("Cannot find XLSX utils"); | ||||
| }; | ||||
| @ -29,7 +28,7 @@ function dup(o) { | ||||
| 	for(var k in o) if(o.hasOwnProperty(k)) out[k] = dup(o[k]); | ||||
| 	return out; | ||||
| } | ||||
| function getdata(data) { | ||||
| function getdatastr(data) { | ||||
| 	if(!data) return null; | ||||
| 	if(data.data) return data.data; | ||||
| 	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary'); | ||||
| @ -38,6 +37,10 @@ function getdata(data) { | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| /* ODS and friends only use text files in container */ | ||||
| function getdata(data) { return getdatastr(data); } | ||||
| 
 | ||||
| /* NOTE: unlike ECMA-376, OASIS does not comment on filename case sensitivity */ | ||||
| function safegetzipfile(zip, file) { | ||||
| 	var f = file; if(zip.files[f]) return zip.files[f]; | ||||
| 	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f]; | ||||
| @ -61,8 +64,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/[^\s?>\/]+=["'][^"]*['"]/g; | ||||
|  | ||||
| @ -2,10 +2,9 @@ | ||||
| var get_utils = function() { | ||||
| 	if(typeof XLSX !== 'undefined') return XLSX.utils; | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined') try { | ||||
| 		return require('../' + 'xlsx').utils; | ||||
| 		return require('../xlsx.js').utils; | ||||
| 	} catch(e) { | ||||
| 		try { return require('./' + 'xlsx').utils; } | ||||
| 		catch(ee) { return require('xl' + 'sx').utils; } | ||||
| 		return require('./xlsx.js').utils; | ||||
| 	} | ||||
| 	throw new Error("Cannot find XLSX utils"); | ||||
| }; | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| function getdata(data) { | ||||
| function getdatastr(data)/*:?string*/ { | ||||
| 	if(!data) return null; | ||||
| 	if(data.data) return data.data; | ||||
| 	if(data.asNodeBuffer && has_buf) return data.asNodeBuffer().toString('binary'); | ||||
| @ -7,20 +7,24 @@ function getdata(data) { | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| function safegetzipfile(zip, file) { | ||||
| /* ODS and friends only use text files in container */ | ||||
| function getdata(data) { return getdatastr(data); } | ||||
| 
 | ||||
| /* NOTE: unlike ECMA-376, OASIS does not comment on filename case sensitivity */ | ||||
| function safegetzipfile(zip, file/*:string*/) { | ||||
| 	var f = file; if(zip.files[f]) return zip.files[f]; | ||||
| 	f = file.toLowerCase(); if(zip.files[f]) return zip.files[f]; | ||||
| 	f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f]; | ||||
| 	return null; | ||||
| } | ||||
| 
 | ||||
| function getzipfile(zip, file) { | ||||
| function getzipfile(zip, file/*:string*/) { | ||||
| 	var o = safegetzipfile(zip, file); | ||||
| 	if(o == null) throw new Error("Cannot find file " + file + " in zip"); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
| function getzipdata(zip, file, safe/*:?boolean*/) { | ||||
| function getzipdata(zip, file/*:string*/, safe/*:?boolean*/) { | ||||
| 	if(!safe) return getdata(getzipfile(zip, file)); | ||||
| 	if(!file) return null; | ||||
| 	try { return getzipdata(zip, file); } catch(e) { return null; } | ||||
| @ -31,7 +35,7 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
| 	"name": "xlsx", | ||||
| 	"version": "0.8.6", | ||||
| 	"version": "0.8.7", | ||||
| 	"author": "sheetjs", | ||||
| 	"description": "Excel (XLSB/XLSX/XLSM/XLS/XML) and ODS (ODS/FODS/UOS) spreadsheet parser and writer", | ||||
| 	"keywords": [ "excel", "xls", "xlsx", "xlsb", "xlsm", "ods", "office", "spreadsheet" ], | ||||
| @ -8,6 +8,12 @@ | ||||
| 		"xlsx": "./bin/xlsx.njs" | ||||
| 	}, | ||||
| 	"main": "./xlsx", | ||||
| 	"browser": { | ||||
| 		"node": false, | ||||
| 		"crypto": false, | ||||
| 		"fs": false, | ||||
| 		"../xlsx.js": false | ||||
| 	}, | ||||
| 	"dependencies": { | ||||
| 		"exit-on-epipe":"", | ||||
| 		"ssf":"~0.8.1", | ||||
|  | ||||
| @ -3,6 +3,7 @@ BlankSheetTypes.xlsb.pending | ||||
| ErrorTypes.xlsb | ||||
| NumberFormatCondition.xlsb | ||||
| RkNumber.xlsb | ||||
| apachepoi_Simple.xlsb.pending | ||||
| calendar_stress_test.xlsb.pending | ||||
| cell_style_simple.xlsb | ||||
| comments_stress_test.xlsb | ||||
| @ -11,17 +12,20 @@ defined_names_simple.xlsb | ||||
| formula_stress_test.xlsb | ||||
| formulae_test_simple.xlsb | ||||
| hyperlink_stress_test_2011.xlsb | ||||
| large_strings.xlsb.pending | ||||
| merge_cells.xlsb | ||||
| named_ranges_2011.xlsb | ||||
| number_format.xlsb | ||||
| number_format_entities.xlsb | ||||
| number_format_russian.xlsb | ||||
| numfmt_1_russian.xlsb | ||||
| pivot_table_named_range.xlsb | ||||
| pivot_table_test.xlsb | ||||
| rich_text_stress.xlsb | ||||
| smart_tags_2007.xlsb | ||||
| sushi.xlsb | ||||
| text_and_numbers.xlsb | ||||
| time_stress_test_1.xlsb.pending | ||||
| xlsx-stream-d-date-cell.xlsb | ||||
| 2013/apachepoi_29982.xls.xlsb | ||||
| 2013/apachepoi_43251.xls.xlsb | ||||
| @ -247,6 +251,7 @@ mixed_sheets.xlsx | ||||
| named_ranges_2011.xlsx | ||||
| number_format_entities.xlsx | ||||
| openpyxl_g_NameWithValueBug.xlsx | ||||
| openpyxl_g_empty.xlsx.pending | ||||
| openpyxl_g_empty-no-string.xlsx | ||||
| openpyxl_g_empty-with-styles.xlsx | ||||
| openpyxl_g_empty_libre.xlsx | ||||
|  | ||||
							
								
								
									
										51
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										51
									
								
								xlsx.flow.js
									
									
									
									
									
								
							| @ -4,10 +4,10 @@ | ||||
| /*jshint funcscope:true, eqnull:true */ | ||||
| var XLSX = {}; | ||||
| (function make_xlsx(XLSX){ | ||||
| XLSX.version = '0.8.6'; | ||||
| XLSX.version = '0.8.7'; | ||||
| var current_codepage = 1200, current_cptable; | ||||
| if(typeof module !== "undefined" && typeof require !== 'undefined') { | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel'); | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel.js'); | ||||
| 	current_cptable = cptable[current_codepage]; | ||||
| } | ||||
| function reset_cp() { set_cp(1200); } | ||||
| @ -1419,8 +1419,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; | ||||
| @ -1889,7 +1889,7 @@ var make_offcrypto = function(O, _crypto) { | ||||
| 	var crypto; | ||||
| 	if(typeof _crypto !== 'undefined') crypto = _crypto; | ||||
| 	else if(typeof require !== 'undefined') { | ||||
| 		try { crypto = require('cry'+'pto'); } | ||||
| 		try { crypto = require('crypto'); } | ||||
| 		catch(e) { crypto = null; } | ||||
| 	} | ||||
| 
 | ||||
| @ -2975,7 +2975,7 @@ function parse_VtVecHeadingPair(blob) { | ||||
| /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ | ||||
| function parse_dictionary(blob,CodePage) { | ||||
| 	var cnt = blob.read_shift(4); | ||||
| 	var dict/*{[number]:string}*/ = ({}/*:any*/); | ||||
| 	var dict/*:{[number]:string}*/ = ({}/*:any*/); | ||||
| 	for(var j = 0; j != cnt; ++j) { | ||||
| 		var pid = blob.read_shift(4); | ||||
| 		var len = blob.read_shift(4); | ||||
| @ -3056,7 +3056,7 @@ function parse_PropertySet(blob, PIDSI) { | ||||
| 	var NumProps = blob.read_shift(4); | ||||
| 	var Props = [], i = 0; | ||||
| 	var CodePage = 0; | ||||
| 	var Dictionary = -1, DictObj/*{[number]:string}*/ = ({}/*:any*/); | ||||
| 	var Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/); | ||||
| 	for(i = 0; i != NumProps; ++i) { | ||||
| 		var PropID = blob.read_shift(4); | ||||
| 		var Offset = blob.read_shift(4); | ||||
| @ -6257,6 +6257,7 @@ function parse_FormulaValue(blob) { | ||||
| 
 | ||||
| /* 2.5.198.103 */ | ||||
| function parse_RgbExtra(blob, length, rgce, opts) { | ||||
| 	if(opts.biff < 8) return parsenoop(blob, length); | ||||
| 	var target = blob.l + length; | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i !== rgce.length; ++i) { | ||||
| @ -6324,7 +6325,6 @@ function parse_ArrayParsedFormula(blob, length, opts, ref) { | ||||
| } | ||||
| 
 | ||||
| /* 2.5.198.104 */ | ||||
| var gcnt = 0; | ||||
| function parse_Rgce(blob, length, opts) { | ||||
| 	var target = blob.l + length; | ||||
| 	var R, id, ptgs = []; | ||||
| @ -6592,6 +6592,7 @@ function stringify_formula(formula, range, cell, supbooks, opts) { | ||||
| 
 | ||||
| 			/* 2.5.198.38 */ | ||||
| 			case 'PtgAttrSpace': | ||||
| 			/* 2.5.198.39 */ | ||||
| 			case 'PtgAttrSpaceSemi': | ||||
| 				last_sp = ff; | ||||
| 				break; | ||||
| @ -10064,7 +10065,7 @@ function parse_xlml_xml(d, opts) { | ||||
| 			} | ||||
| 			if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|"); | ||||
| 	} | ||||
| 	var out = ({}/*:Any*/); | ||||
| 	var out = ({}/*:any*/); | ||||
| 	if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets; | ||||
| 	out.SheetNames = sheetnames; | ||||
| 	out.SSF = SSF.get_table(); | ||||
| @ -10249,6 +10250,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; | ||||
| 		var R = XLSRecordEnum[RecordType]; | ||||
| 		//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);
 | ||||
| 		//if(!R) console.log(blob.slice(blob.l, blob.l + length));
 | ||||
| 		if(R && R.f) { | ||||
| 			if(options.bookSheets) { | ||||
| 				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break; | ||||
| @ -10342,12 +10344,13 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { | ||||
| 				} break; | ||||
| 				case 'BOF': { | ||||
| 					if(opts.biff !== 8){} | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0009) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0209) opts.biff = 3; | ||||
| 					else if(RecordType  === 0x0409) opts.biff = 4; | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0600) opts.biff = 8; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					if(file_depth++) break; | ||||
| 					cell_valid = true; | ||||
| 					out = {}; | ||||
| @ -12151,18 +12154,23 @@ function write_csv_str(wb/*:Workbook*/, o/*:WriteOpts*/) { | ||||
| 	return sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o); | ||||
| } | ||||
| /* Helper functions to call out to ODS */ | ||||
| 
 | ||||
| function get_ods() { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./ods.js'); | ||||
| 	return ODS; | ||||
| } | ||||
| function parse_ods(zip, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_ods(zip, opts); | ||||
| } | ||||
| function write_ods(wb, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.write_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.write_ods(wb, opts); | ||||
| } | ||||
| function parse_fods(data, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_fods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_fods(data, opts); | ||||
| } | ||||
| @ -12574,13 +12582,20 @@ function unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\$([A-Z]) | ||||
| 
 | ||||
| function split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(","); } | ||||
| function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; } | ||||
| function encode_cell(cell/*:Cell*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); } | ||||
| function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); } | ||||
| function fix_cell(cstr/*:string*/)/*:string*/ { return fix_col(fix_row(cstr)); } | ||||
| function unfix_cell(cstr/*:string*/)/*:string*/ { return unfix_col(unfix_row(cstr)); } | ||||
| function decode_range(range/*:string*/)/*:Range*/ { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } | ||||
| function encode_range(cs/*:any*/,ce/*:?any*/)/*:string*/ { | ||||
| 	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e); | ||||
| 	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce); | ||||
| 	if(typeof ce === 'undefined' || typeof ce === 'number') { | ||||
| /*:: if(!(cs instanceof Range)) throw "unreachable"; */ | ||||
| 		return encode_range(cs.s, cs.e); | ||||
| 	} | ||||
| /*:: if((cs instanceof Range)) throw "unreachable"; */ | ||||
| 	if(typeof cs !== 'string') cs = encode_cell((cs/*:any*/)); | ||||
| 	if(typeof ce !== 'string') ce = encode_cell((ce/*:any*/)); | ||||
| /*:: if(typeof cs !== 'string') throw "unreachable"; */ | ||||
| /*:: if(typeof ce !== 'string') throw "unreachable"; */ | ||||
| 	return cs == ce ? cs : cs + ":" + ce; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										45
									
								
								xlsx.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										45
									
								
								xlsx.js
									
									
									
									
									
								
							| @ -4,10 +4,10 @@ | ||||
| /*jshint funcscope:true, eqnull:true */ | ||||
| var XLSX = {}; | ||||
| (function make_xlsx(XLSX){ | ||||
| XLSX.version = '0.8.6'; | ||||
| XLSX.version = '0.8.7'; | ||||
| var current_codepage = 1200, current_cptable; | ||||
| if(typeof module !== "undefined" && typeof require !== 'undefined') { | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel'); | ||||
| 	if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel.js'); | ||||
| 	current_cptable = cptable[current_codepage]; | ||||
| } | ||||
| function reset_cp() { set_cp(1200); } | ||||
| @ -1377,8 +1377,8 @@ var _fs, jszip; | ||||
| if(typeof JSZip !== 'undefined') jszip = JSZip; | ||||
| if (typeof exports !== 'undefined') { | ||||
| 	if (typeof module !== 'undefined' && module.exports) { | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./js'+'zip'); | ||||
| 		_fs = require('f'+'s'); | ||||
| 		if(typeof jszip === 'undefined') jszip = require('./jszip.js'); | ||||
| 		_fs = require('fs'); | ||||
| 	} | ||||
| } | ||||
| var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; | ||||
| @ -1847,7 +1847,7 @@ var make_offcrypto = function(O, _crypto) { | ||||
| 	var crypto; | ||||
| 	if(typeof _crypto !== 'undefined') crypto = _crypto; | ||||
| 	else if(typeof require !== 'undefined') { | ||||
| 		try { crypto = require('cry'+'pto'); } | ||||
| 		try { crypto = require('crypto'); } | ||||
| 		catch(e) { crypto = null; } | ||||
| 	} | ||||
| 
 | ||||
| @ -2933,7 +2933,7 @@ function parse_VtVecHeadingPair(blob) { | ||||
| /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ | ||||
| function parse_dictionary(blob,CodePage) { | ||||
| 	var cnt = blob.read_shift(4); | ||||
| 	var dict/*{[number]:string}*/ = ({}); | ||||
| 	var dict = ({}); | ||||
| 	for(var j = 0; j != cnt; ++j) { | ||||
| 		var pid = blob.read_shift(4); | ||||
| 		var len = blob.read_shift(4); | ||||
| @ -3014,7 +3014,7 @@ function parse_PropertySet(blob, PIDSI) { | ||||
| 	var NumProps = blob.read_shift(4); | ||||
| 	var Props = [], i = 0; | ||||
| 	var CodePage = 0; | ||||
| 	var Dictionary = -1, DictObj/*{[number]:string}*/ = ({}); | ||||
| 	var Dictionary = -1, DictObj = ({}); | ||||
| 	for(i = 0; i != NumProps; ++i) { | ||||
| 		var PropID = blob.read_shift(4); | ||||
| 		var Offset = blob.read_shift(4); | ||||
| @ -6215,6 +6215,7 @@ function parse_FormulaValue(blob) { | ||||
| 
 | ||||
| /* 2.5.198.103 */ | ||||
| function parse_RgbExtra(blob, length, rgce, opts) { | ||||
| 	if(opts.biff < 8) return parsenoop(blob, length); | ||||
| 	var target = blob.l + length; | ||||
| 	var o = []; | ||||
| 	for(var i = 0; i !== rgce.length; ++i) { | ||||
| @ -6282,7 +6283,6 @@ function parse_ArrayParsedFormula(blob, length, opts, ref) { | ||||
| } | ||||
| 
 | ||||
| /* 2.5.198.104 */ | ||||
| var gcnt = 0; | ||||
| function parse_Rgce(blob, length, opts) { | ||||
| 	var target = blob.l + length; | ||||
| 	var R, id, ptgs = []; | ||||
| @ -6550,6 +6550,7 @@ function stringify_formula(formula, range, cell, supbooks, opts) { | ||||
| 
 | ||||
| 			/* 2.5.198.38 */ | ||||
| 			case 'PtgAttrSpace': | ||||
| 			/* 2.5.198.39 */ | ||||
| 			case 'PtgAttrSpaceSemi': | ||||
| 				last_sp = ff; | ||||
| 				break; | ||||
| @ -10205,6 +10206,7 @@ function parse_workbook(blob, options) { | ||||
| 		var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; | ||||
| 		var R = XLSRecordEnum[RecordType]; | ||||
| 		//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);
 | ||||
| 		//if(!R) console.log(blob.slice(blob.l, blob.l + length));
 | ||||
| 		if(R && R.f) { | ||||
| 			if(options.bookSheets) { | ||||
| 				if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break; | ||||
| @ -10298,12 +10300,13 @@ function parse_workbook(blob, options) { | ||||
| 				} break; | ||||
| 				case 'BOF': { | ||||
| 					if(opts.biff !== 8){} | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0009) opts.biff = 2; | ||||
| 					else if(RecordType  === 0x0209) opts.biff = 3; | ||||
| 					else if(RecordType  === 0x0409) opts.biff = 4; | ||||
| 					else if(val.BIFFVer === 0x0500) opts.biff = 5; | ||||
| 					else if(val.BIFFVer === 0x0600) opts.biff = 8; | ||||
| 					else if(val.BIFFVer === 0x0002) opts.biff = 2; | ||||
| 					else if(val.BIFFVer === 0x0007) opts.biff = 2; | ||||
| 					if(file_depth++) break; | ||||
| 					cell_valid = true; | ||||
| 					out = {}; | ||||
| @ -12107,18 +12110,23 @@ function write_csv_str(wb, o) { | ||||
| 	return sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o); | ||||
| } | ||||
| /* Helper functions to call out to ODS */ | ||||
| 
 | ||||
| function get_ods() { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./ods.js'); | ||||
| 	return ODS; | ||||
| } | ||||
| function parse_ods(zip, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_ods(zip, opts); | ||||
| } | ||||
| function write_ods(wb, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.write_ods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.write_ods(wb, opts); | ||||
| } | ||||
| function parse_fods(data, opts) { | ||||
| 	if(typeof module !== "undefined" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's'); | ||||
| 	get_ods(); | ||||
| 	if(typeof ODS === 'undefined' || !ODS.parse_fods) throw new Error("Unsupported ODS"); | ||||
| 	return ODS.parse_fods(data, opts); | ||||
| } | ||||
| @ -12533,9 +12541,12 @@ function fix_cell(cstr) { return fix_col(fix_row(cstr)); } | ||||
| function unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); } | ||||
| function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } | ||||
| function encode_range(cs,ce) { | ||||
| 	if(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e); | ||||
| 	if(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce); | ||||
| 	return cs == ce ? cs : cs + ":" + ce; | ||||
| 	if(typeof ce === 'undefined' || typeof ce === 'number') { | ||||
| return encode_range(cs.s, cs.e); | ||||
| 	} | ||||
| if(typeof cs !== 'string') cs = encode_cell((cs)); | ||||
| 	if(typeof ce !== 'string') ce = encode_cell((ce)); | ||||
| return cs == ce ? cs : cs + ":" + ce; | ||||
| } | ||||
| 
 | ||||
| function safe_decode_range(range) { | ||||
|  | ||||
| @ -11,8 +11,8 @@ importScripts('dist/ods.js'); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,/*::(*/new Uint16Array(data.slice(l*w,l*w+w))/*:: :any)*/); | ||||
| 	o+=String.fromCharCode.apply(null, /*::(*/new Uint16Array(data.slice(l*w))/*:: :any)*/); | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,/*::(*/new Uint8Array(data.slice(l*w,l*w+w))/*:: :any)*/); | ||||
| 	o+=String.fromCharCode.apply(null, /*::(*/new Uint8Array(data.slice(l*w))/*:: :any)*/); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -9,8 +9,8 @@ postMessage({t:"ready"}); | ||||
| 
 | ||||
| function ab2str(data) { | ||||
| 	var o = "", l = 0, w = 10240; | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w))); | ||||
| 	for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||||
| 	o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||||
| 	return o; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user