| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | # xlsx
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | Parser and writer for XLSX/XLSM/XLSB files.  Cleanroom implementation from the | 
					
						
							| 
									
										
										
										
											2014-01-28 16:38:02 +00:00
										 |  |  | ISO 29500  Office Open XML specifications, [MS-XLSB], and related documents. | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Installation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | In [nodejs](https://www.npmjs.org/package/xlsx): | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     npm install xlsx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In the browser: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-23 01:37:08 +00:00
										 |  |  |     <!-- This is the only file you need (includes xlsx.js and jszip) --> | 
					
						
							|  |  |  |     <script lang="javascript" src="dist/xlsx.core.min.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | In [bower](http://bower.io/search/?q=js-xlsx): | 
					
						
							| 
									
										
										
										
											2014-04-23 01:37:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     bower install js-xlsx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CDNjs automatically pulls the latest version and makes all versions available at | 
					
						
							|  |  |  | <http://cdnjs.com/libraries/xlsx> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Older versions of this README recommended a more explicit approach: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  |     <!-- JSZip must be included before xlsx.js --> | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  |     <script lang="javascript" src="/path/to/jszip.js"></script> | 
					
						
							|  |  |  |     <script lang="javascript" src="/path/to/xlsx.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-23 01:37:08 +00:00
										 |  |  | ## Optional Modules
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | The nodejs version automatically requires modules for additional features.  Some | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | of these modules are rather large in size and are only needed in special | 
					
						
							|  |  |  | circumstances, so they do not ship with the core.  For browser use, they must | 
					
						
							|  |  |  | be included directly: | 
					
						
							| 
									
										
										
										
											2014-04-23 01:37:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     <!-- international support from https://github.com/sheetjs/js-codepage --> | 
					
						
							|  |  |  |     <script src="dist/cpexcel.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-03 18:39:46 +00:00
										 |  |  | ## ECMAScript 5 compatibility
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Since xlsx.js uses ES5 functions like `Array#forEach`, older browsers require | 
					
						
							|  |  |  | [Polyfills](http://git.io/QVh77g).  This repo and the gh-pages branch include | 
					
						
							|  |  |  | [a shim](https://github.com/SheetJS/js-xlsx/blob/master/shim.js) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To use the shim, add the shim before the script tag that loads xlsx.js: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <script type="text/javascript" src="/path/to/shim.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | ## Parsing Workbooks
 | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | For parsing, the first step is to read the file. | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | - nodejs: | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | if(typeof require !== 'undefined') XLSX = require('xlsx'); | 
					
						
							|  |  |  | var workbook = XLSX.readFile('test.xlsx'); | 
					
						
							|  |  |  | /* DO SOMETHING WITH workbook HERE */ | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2014-05-22 12:16:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | - ajax: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | /* set up XMLHttpRequest */ | 
					
						
							|  |  |  | var url = "test_files/formula_stress_test_ajax.xlsx"; | 
					
						
							|  |  |  | var oReq = new XMLHttpRequest(); | 
					
						
							|  |  |  | oReq.open("GET", url, true); | 
					
						
							|  |  |  | oReq.responseType = "arraybuffer"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | oReq.onload = function(e) { | 
					
						
							|  |  |  |   var arraybuffer = oReq.response; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* convert data to binary string */ | 
					
						
							|  |  |  |   var data = new Uint8Array(arraybuffer); | 
					
						
							|  |  |  |   var arr = new Array(); | 
					
						
							|  |  |  |   for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); | 
					
						
							|  |  |  |   var bstr = arr.join(""); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Call XLSX */ | 
					
						
							|  |  |  |   var workbook = XLSX.read(bstr, {type:"binary"}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* DO SOMETHING WITH workbook HERE */ | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | oReq.send(); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - html5 drag-and-drop using readAsBinaryString: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | /* set up drag-and-drop event */ | 
					
						
							|  |  |  | function handleDrop(e) { | 
					
						
							|  |  |  |   e.stopPropagation(); | 
					
						
							|  |  |  |   e.preventDefault(); | 
					
						
							|  |  |  |   var files = e.dataTransfer.files; | 
					
						
							|  |  |  |   var i,f; | 
					
						
							|  |  |  |   for (i = 0, f = files[i]; i != files.length; ++i) { | 
					
						
							|  |  |  |     var reader = new FileReader(); | 
					
						
							|  |  |  |     var name = f.name; | 
					
						
							|  |  |  |     reader.onload = function(e) { | 
					
						
							|  |  |  |       var data = e.target.result; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       /* if binary string, read with type 'binary' */ | 
					
						
							|  |  |  |       var wb = XLSX.read(data, {type: 'binary'}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       /* DO SOMETHING WITH workbook HERE */ | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     reader.readAsBinaryString(f); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | drop_dom_element.addEventListener('drop', handleDrop, false); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This example walks through every cell of every sheet and dumps the values: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | var sheet_name_list = workbook.SheetNames; | 
					
						
							|  |  |  | sheet_name_list.forEach(function(y) { | 
					
						
							|  |  |  |   var worksheet = workbook.Sheets[y]; | 
					
						
							|  |  |  |   for (z in worksheet) { | 
					
						
							|  |  |  |     if(z[0] === '!') continue; | 
					
						
							|  |  |  |     console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | Complete examples: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - <http://oss.sheetjs.com/js-xlsx/> HTML5 File API / Base64 Text / Web Workers | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | Note that older versions of IE does not support HTML5 File API, so the base64 | 
					
						
							|  |  |  | mode is provided for testing.  On OSX you can get the base64 encoding with: | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  |     $ <target_file.xlsx base64 | pbcopy | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - <http://oss.sheetjs.com/js-xlsx/ajax.html> XMLHttpRequest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - <https://github.com/SheetJS/js-xlsx/blob/master/bin/xlsx.njs> nodejs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The nodejs version installs a binary `xlsx` which can read XLSX/XLSM/XLSB | 
					
						
							|  |  |  | files and output the contents in various formats.  The source is available at | 
					
						
							|  |  |  | `xlsx.njs` in the bin directory. | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | Some helper functions in `XLSX.utils` generate different views of the sheets: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | - `XLSX.utils.sheet_to_csv` generates CSV | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | - `XLSX.utils.sheet_to_json` generates an array of objects | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | - `XLSX.utils.get_formulae` generates a list of formulae | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | ## Writing Workbooks
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Assuming `workbook` is a workbook object, just call write: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - nodejs write to file: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | /* output format determined by filename */ | 
					
						
							|  |  |  | XLSX.writeFile(workbook, 'out.xlsx'); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - write to binary string (using FileSaver.js) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | /* bookType can be 'xlsx' or 'xlsm' or 'xlsb' */ | 
					
						
							|  |  |  | var wopts = { bookType:'xlsx', bookSST:true, type:'binary' }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var wbout = XLSX.write(workbook,wopts); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function s2ab(s) { | 
					
						
							|  |  |  |   var buf = new ArrayBuffer(s.length); | 
					
						
							|  |  |  |   var view = new Uint8Array(buf); | 
					
						
							|  |  |  |   for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; | 
					
						
							|  |  |  |   return buf; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | saveAs(new Blob([s2ab(wbout)],{type:""}), "test.xlsx") | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Complete examples: | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | - <http://sheetjs.com/demos/writexlsx.html> generates a simple file | 
					
						
							|  |  |  | - <http://git.io/WEK88Q> writing an array of arrays in nodejs | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | ## Interface
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | `XLSX` is the exposed variable in the browser and the exported nodejs variable | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `XLSX.read(data, read_opts)` attempts to parse `data`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `XLSX.readFile(filename, read_opts)` attempts to read `filename` and parse. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `XLSX.write(wb, write_opts)` attempts to write the workbook `wb` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `XLSX.writeFile(wb, filename, write_opts)` attempts to write `wb` to `filename` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  | ## Cell Object Description
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | js-xlsx conforms to the Common Spreadsheet Format (CSF): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | `.SheetNames` is an ordered list of the sheets in the workbook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `.Sheets[sheetname]` returns a data structure representing the sheet.  Each key | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | that does not start with `!` corresponds to a cell (using `A-1` notation). | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | `.Sheets[sheetname][address]` returns the specified cell: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | - `.v` : the raw value of the cell | 
					
						
							|  |  |  | - `.w` : the formatted text of the cell (if applicable) | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | - `.t` : the type of the cell (constrained to the enumeration `ST_CellType` as | 
					
						
							|  |  |  |   documented in page 4215 of ISO/IEC 29500-1:2012(E) ) | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | - `.f` : the formula of the cell (if applicable) | 
					
						
							|  |  |  | - `.r` : the rich text encoding of a cell text (if applicable) | 
					
						
							|  |  |  | - `.h` : an HTML rendering of the rich text (if applicable) | 
					
						
							|  |  |  | - `.c` : comments associated with the cell | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  | - `.z` : the number format string associated with the cell (if requested) | 
					
						
							| 
									
										
										
										
											2014-04-15 09:04:03 +00:00
										 |  |  | - `.l` : the hyperlink of the cell (.Target holds link, .tooltip is tooltip) | 
					
						
							| 
									
										
										
										
											2014-05-29 06:18:23 +00:00
										 |  |  | - `.s` : the style/theme of the cell (if applicable) | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | For dates, `.v` holds the raw date code from the sheet and `.w` holds the text | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | ## Parsing Options
 | 
					
						
							| 
									
										
										
										
											2013-04-20 16:22:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | The exported `read` and `readFile` functions accept an options argument: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Option Name | Default | Description | | 
					
						
							|  |  |  | | :---------- | ------: | :---------- | | 
					
						
							| 
									
										
										
										
											2014-05-25 09:04:08 +00:00
										 |  |  | | cellFormula | true    | Save formulae to the .f field | | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | | cellHTML    | true    | Parse rich text and save HTML to the .h field | | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | | cellNF      | false   | Save number format string to the .z field | | 
					
						
							| 
									
										
										
										
											2014-05-29 06:18:23 +00:00
										 |  |  | | cellStyles  | false   | Save style/theme info to the .s field | | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | | sheetStubs  | false   | Create cell objects for stub cells | | 
					
						
							| 
									
										
										
										
											2014-02-19 03:03:28 +00:00
										 |  |  | | sheetRows   | 0       | If >0, read the first `sheetRows` rows ** | | 
					
						
							| 
									
										
										
										
											2014-02-15 05:08:18 +00:00
										 |  |  | | bookDeps    | false   | If true, parse calculation chains | | 
					
						
							| 
									
										
										
										
											2014-02-19 03:03:28 +00:00
										 |  |  | | bookFiles   | false   | If true, add raw files to book object ** | | 
					
						
							| 
									
										
										
										
											2014-02-14 06:25:46 +00:00
										 |  |  | | bookProps   | false   | If true, only parse enough to get book metadata ** | | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  | | bookSheets  | false   | If true, only parse enough to get the sheet names | | 
					
						
							| 
									
										
										
										
											2014-04-03 22:51:54 +00:00
										 |  |  | | bookVBA     | false   | If true, expose vbaProject.bin to `vbaraw` field ** | | 
					
						
							| 
									
										
										
										
											2014-02-12 06:09:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | - Even if `cellNF` is false, formatted text (.w) will be generated | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  | - In some cases, sheets may be parsed even if `bookSheets` is false. | 
					
						
							| 
									
										
										
										
											2014-02-14 06:25:46 +00:00
										 |  |  | - `bookSheets` and `bookProps` combine to give both sets of information | 
					
						
							| 
									
										
										
										
											2014-02-15 05:08:18 +00:00
										 |  |  | - `Deps` will be an empty object if `bookDeps` is falsy | 
					
						
							| 
									
										
										
										
											2014-02-19 03:03:28 +00:00
										 |  |  | - `bookFiles` adds a `keys` array (paths in the ZIP) and a `files` hash (whose | 
					
						
							|  |  |  |   keys are paths and values are objects representing the files) | 
					
						
							|  |  |  | - `sheetRows-1` rows will be generated when looking at the JSON object output | 
					
						
							|  |  |  |   (since the header row is counted as a row when parsing the data) | 
					
						
							| 
									
										
										
										
											2014-04-03 22:51:54 +00:00
										 |  |  | - `bookVBA` merely exposes the raw vba object.  It does not parse the data. | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  | The defaults are enumerated in bits/84_defaults.js | 
					
						
							| 
									
										
										
										
											2013-04-20 16:22:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | ## Writing Options
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The exported `write` and `writeFile` functions accept an options argument: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Option Name | Default | Description | | 
					
						
							|  |  |  | | :---------- | ------: | :---------- | | 
					
						
							|  |  |  | | bookSST     | false   | Generate Shared String Table ** | | 
					
						
							|  |  |  | | bookType    | 'xlsx'  | Type of Workbook ("xlsx" or "xlsm" or "xlsb") | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - `bookSST` is slower and more memory intensive, but has better compatibility | 
					
						
							|  |  |  |   with iOS Numbers | 
					
						
							| 
									
										
										
										
											2014-05-16 00:50:55 +00:00
										 |  |  | - `bookType = 'xlsb'` is stubbed and far from complete | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | - The raw data is the only thing guaranteed to be saved.  Formulae, formatting, | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  |   and other niceties may not be serialized (pending CSF standardization) | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | ## Tested Environments
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  |  - NodeJS 0.8, 0.10 (latest release) | 
					
						
							| 
									
										
										
										
											2014-02-19 03:03:28 +00:00
										 |  |  |  - IE 6/7/8/9/10 using Base64 mode (IE10/11 using HTML5 mode) | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  |  - FF 18 using Base64 or HTML5 mode | 
					
						
							|  |  |  |  - Chrome 24 using Base64 or HTML5 mode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Tests utilize the mocha testing framework.  Travis-CI and Sauce Labs links: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  |  - <https://travis-ci.org/SheetJS/js-xlsx> for XLSX module in nodejs | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  |  - <https://travis-ci.org/SheetJS/SheetJS.github.io> for XLS* modules | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  |  - <https://saucelabs.com/u/sheetjs> for XLS* modules using Sauce Labs | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 19:26:07 +00:00
										 |  |  | ## Test Files
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-13 23:28:11 +00:00
										 |  |  | Test files are housed in [another repo](https://github.com/SheetJS/test_files). | 
					
						
							| 
									
										
										
										
											2013-10-30 19:26:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | Running `make init` will refresh the `test_files` submodule and get the files. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | ## Testing
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | `make test` will run the nodejs-based tests.  To run the in-browser tests, clone | 
					
						
							| 
									
										
										
										
											2014-02-04 00:00:44 +00:00
										 |  |  | [the oss.sheetjs.com repo](https://github.com/SheetJS/SheetJS.github.io) and | 
					
						
							|  |  |  | replace the xlsx.js file (then fire up the browser and go to `stress.html`): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | $ cp xlsx.js ../SheetJS.github.io | 
					
						
							|  |  |  | $ cd ../SheetJS.github.io | 
					
						
							|  |  |  | $ simplehttpserver # or "python -mSimpleHTTPServer" or "serve" | 
					
						
							|  |  |  | $ open -a Chromium.app http://localhost:8000/stress.html | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-16 00:33:34 +00:00
										 |  |  | For a much smaller test, run `make test_misc`. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | ## Contributing
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | Due to the precarious nature of the Open Specifications Promise, it is very | 
					
						
							|  |  |  | important to ensure code is cleanroom.  Consult CONTRIBUTING.md | 
					
						
							| 
									
										
										
										
											2014-02-07 10:53:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | ## XLS Support
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-28 18:31:33 +00:00
										 |  |  | XLS is available in [js-xls](http://git.io/xls). | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | ## License
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | Please consult the attached LICENSE file for details.  All rights not explicitly | 
					
						
							|  |  |  | granted by the Apache 2.0 license are reserved by the Original Author. | 
					
						
							| 
									
										
										
										
											2013-10-30 19:26:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  | It is the opinion of the Original Author that this code conforms to the terms of | 
					
						
							|  |  |  | the Microsoft Open Specifications Promise, falling under the same terms as | 
					
						
							|  |  |  | OpenOffice (which is governed by the Apache License v2).  Given the vagaries of | 
					
						
							|  |  |  | the promise, the Original Author makes no legal claim that in fact end users are | 
					
						
							|  |  |  | protected from future actions.  It is highly recommended that, for commercial | 
					
						
							|  |  |  | uses, you consult a lawyer before proceeding. | 
					
						
							| 
									
										
										
										
											2012-12-04 19:27:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## References
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ISO/IEC 29500:2012(E) "Information technology — Document description and processing languages — Office Open XML File Formats" | 
					
						
							| 
									
										
										
										
											2012-12-03 19:25:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 19:26:07 +00:00
										 |  |  | OSP-covered specifications: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-28 16:38:02 +00:00
										 |  |  |  - [MS-XLSB]: Excel (.xlsb) Binary File Format | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  |  - [MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format | 
					
						
							| 
									
										
										
										
											2014-02-13 06:22:42 +00:00
										 |  |  |  - [MS-OE376]: Office Implementation Information for ECMA-376 Standards Support | 
					
						
							| 
									
										
										
										
											2014-05-01 00:24:27 +00:00
										 |  |  |  - [MS-XLDM]: Spreadsheet Data Model File Format | 
					
						
							| 
									
										
										
										
											2013-10-30 19:26:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 09:38:50 +00:00
										 |  |  | ## Badges
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [](https://travis-ci.org/SheetJS/js-xlsx) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [](https://coveralls.io/r/SheetJS/js-xlsx?branch=master) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-07 06:23:42 +00:00
										 |  |  | [](http://githalytics.com/SheetJS/js-xlsx) | 
					
						
							|  |  |  | 
 |