xlsx-export-lib
Advanced tools
Comparing version 1.0.0 to 1.0.1
{ | ||
"name": "xlsx-export-lib", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "Excel (XLSB/XLSX/XLSM/XLS/XML) and ODS spreadsheet parser and writer (extended to enable read/write of cell formats with xlsx files)", | ||
@@ -5,0 +5,0 @@ "main": "./xlsx", |
367
README.md
@@ -1,21 +0,4 @@ | ||
# xlsx-style | ||
# About this fork | ||
- this is a continuation of the the library xlsx-style (https://www.npmjs.com/package/xlsx-style) | ||
Parser and writer for various spreadsheet formats. Pure-JS cleanroom implementation from official specifications and related documents. | ||
#About this fork | ||
This fork just correct an error on dist/cpexcel.js which crash the compilation | ||
# About the fork of xlsx-style to xlsx | ||
**NOTE:** [This project](https://github.com/SheetJS/js-xlsx/tree/beta) is a fork of the original (and awesome) [SheetJS/xlsx](https://github.com/SheetJS/js-xlsx) project. | ||
It is extended to enable cell formats to be read from and written to .xlsx workbooks. | ||
The intent is to provide a temporary means of using these features in practice, and ultimately to merge this into the primary project. | ||
Report any issues to https://github.com/protobi/js-xlsx/issues. | ||
For those contributing to this fork: | ||
* `master` is the main branch, which follows the original repo to enable a future pull request. | ||
* `beta` branch is published to npm and bower to make this fork available for use. | ||
# Supported formats | ||
@@ -38,251 +21,11 @@ | ||
Demo: <http://oss.sheetjs.com/js-xlsx> | ||
Source: <http://git.io/xlsx> | ||
## Installation | ||
With [npm](https://www.npmjs.org/package/xlsx-style): | ||
With [npm](https://www.npmjs.com/package/xlsx-export-lib): | ||
```sh | ||
npm install xlsx-style --save | ||
npm install xlsx-export-lib --save | ||
``` | ||
\ | ||
In the browser: | ||
```html | ||
<script lang="javascript" src="dist/xlsx.core.min.js"></script> | ||
``` | ||
With [bower](http://bower.io/search/?q=js-xlsx): | ||
```sh | ||
bower install js-xlsx-style#beta | ||
``` | ||
CDNjs automatically pulls the latest version and makes all versions available at | ||
<http://cdnjs.com/libraries/xlsx> | ||
## Optional Modules | ||
The node version automatically requires modules for additional features. Some | ||
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: | ||
```html | ||
<!-- international support from https://github.com/sheetjs/js-codepage --> | ||
<script src="dist/cpexcel.js"></script> | ||
<!-- ODS support --> | ||
<script src="dist/ods.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` | ||
## 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: | ||
```html | ||
<script type="text/javascript" src="/path/to/shim.js"></script> | ||
``` | ||
## Parsing Workbooks | ||
For parsing, the first step is to read the file. This involves acquiring the | ||
data and feeding it into the library. Here are a few common scenarios: | ||
- node readFile: | ||
```js | ||
if(typeof require !== 'undefined') XLSX = require('xlsx'); | ||
var workbook = XLSX.readFile('test.xlsx'); | ||
/* DO SOMETHING WITH workbook HERE */ | ||
``` | ||
- ajax (for a more complete example that works in older browsers, check the demo | ||
at <http://oss.sheetjs.com/js-xlsx/ajax.html>): | ||
```js | ||
/* 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: | ||
```js | ||
/* 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 workbook = XLSX.read(data, {type: 'binary'}); | ||
/* DO SOMETHING WITH workbook HERE */ | ||
}; | ||
reader.readAsBinaryString(f); | ||
} | ||
} | ||
drop_dom_element.addEventListener('drop', handleDrop, false); | ||
``` | ||
- HTML5 input file element using readAsBinaryString: | ||
```js | ||
function handleFile(e) { | ||
var files = e.target.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; | ||
var workbook = XLSX.read(data, {type: 'binary'}); | ||
/* DO SOMETHING WITH workbook HERE */ | ||
}; | ||
reader.readAsBinaryString(f); | ||
} | ||
} | ||
input_dom_element.addEventListener('change', handleFile, false); | ||
``` | ||
## Working with the Workbook | ||
The full object format is described later in this README. | ||
This example extracts the value stored in cell A1 from the first worksheet: | ||
```js | ||
var first_sheet_name = workbook.SheetNames[0]; | ||
var address_of_cell = 'A1'; | ||
/* Get worksheet */ | ||
var worksheet = workbook.Sheets[first_sheet_name]; | ||
/* Find desired cell */ | ||
var desired_cell = worksheet[address_of_cell]; | ||
/* Get the value */ | ||
var desired_value = desired_cell.v; | ||
``` | ||
This example iterates through every nonempty of every sheet and dumps values: | ||
```js | ||
var sheet_name_list = workbook.SheetNames; | ||
sheet_name_list.forEach(function(y) { /* iterate through sheets */ | ||
var worksheet = workbook.Sheets[y]; | ||
for (z in worksheet) { | ||
/* all keys that do not begin with "!" correspond to cell addresses */ | ||
if(z[0] === '!') continue; | ||
console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); | ||
} | ||
}); | ||
``` | ||
Complete examples: | ||
- <http://oss.sheetjs.com/js-xlsx/> HTML5 File API / Base64 Text / Web Workers | ||
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: | ||
```sh | ||
$ <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> node | ||
The node version installs a command line tool `xlsx` which can read spreadsheet | ||
files and output the contents in various formats. The source is available at | ||
`xlsx.njs` in the bin directory. | ||
Some helper functions in `XLSX.utils` generate different views of the sheets: | ||
- `XLSX.utils.sheet_to_csv` generates CSV | ||
- `XLSX.utils.sheet_to_json` generates an array of objects | ||
- `XLSX.utils.sheet_to_formulae` generates a list of formulae | ||
## Writing Workbooks | ||
For writing, the first step is to generate output data. The helper functions | ||
`write` and `writeFile` will produce the data in various formats suitable for | ||
dissemination. The second step is to actual share the data with the end point. | ||
Assuming `workbook` is a workbook object: | ||
- nodejs write to file: | ||
```js | ||
/* output format determined by filename */ | ||
XLSX.writeFile(workbook, 'out.xlsx'); | ||
/* at this point, out.xlsx is a file that you can distribute */ | ||
``` | ||
- write to binary string (using FileSaver.js): | ||
```js | ||
/* bookType can be 'xlsx' or 'xlsm' or 'xlsb' */ | ||
var wopts = { bookType:'xlsx', bookSST:false, 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; | ||
} | ||
/* the saveAs call downloads a file on the local machine */ | ||
saveAs(new Blob([s2ab(wbout)],{type:""}), "test.xlsx") | ||
``` | ||
Complete examples: | ||
- <http://sheetjs.com/demos/writexlsx.html> generates a simple file | ||
- <http://git.io/WEK88Q> writing an array of arrays in nodejs | ||
- <http://sheetjs.com/demos/table.html> exporting an HTML table | ||
## Interface | ||
@@ -614,100 +357,2 @@ | ||
* top borders for the cells on the top | ||
* bottom borders for the cells on the left | ||
## Tested Environments | ||
- NodeJS 0.8, 0.10 (latest release), 0.11.14 (unstable), io.js | ||
- IE 6/7/8/9/10/11 using Base64 mode (IE10/11 using HTML5 mode) | ||
- 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: | ||
- <https://travis-ci.org/SheetJS/js-xlsx> for XLSX module in nodejs | ||
- <https://travis-ci.org/SheetJS/SheetJS.github.io> for XLS* modules | ||
- <https://saucelabs.com/u/sheetjs> for XLS* modules using Sauce Labs | ||
## Test Files | ||
Test files are housed in [another repo](https://github.com/SheetJS/test_files). | ||
Running `make init` will refresh the `test_files` submodule and get the files. | ||
## Testing | ||
`make test` will run the node-based tests. To run the in-browser tests, clone | ||
[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`): | ||
```sh | ||
$ 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 | ||
``` | ||
For a much smaller test, run `make test_misc`. | ||
## Contributing | ||
Due to the precarious nature of the Open Specifications Promise, it is very | ||
important to ensure code is cleanroom. Consult CONTRIBUTING.md | ||
The xlsx.js file is constructed from the files in the `bits` subdirectory. The | ||
build script (run `make`) will concatenate the individual bits to produce the | ||
script. Before submitting a contribution, ensure that running make will produce | ||
the xlsx.js file exactly. The simplest way to test is to move the script: | ||
```sh | ||
$ mv xlsx.js xlsx.new.js | ||
$ make | ||
$ diff xlsx.js xlsx.new.js | ||
``` | ||
To produce the dist files, run `make dist`. The dist files are updated in each | ||
version release and should not be committed between versions. | ||
## License | ||
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. | ||
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. | ||
## References | ||
ISO/IEC 29500:2012(E) "Information technology — Document description and processing languages — Office Open XML File Formats" | ||
OSP-covered specifications: | ||
- [MS-XLSB]: Excel (.xlsb) Binary File Format | ||
- [MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format | ||
- [MS-OE376]: Office Implementation Information for ECMA-376 Standards Support | ||
- [MS-CFB]: Compound File Binary File Format | ||
- [MS-XLS]: Excel Binary File Format (.xls) Structure Specification | ||
- [MS-ODATA]: Open Data Protocol (OData) | ||
- [MS-OFFCRYPTO]: Office Document Cryptography Structure | ||
- [MS-OLEDS]: Object Linking and Embedding (OLE) Data Structures | ||
- [MS-OLEPS]: Object Linking and Embedding (OLE) Property Set Data Structures | ||
- [MS-OSHARED]: Office Common Data Types and Objects Structures | ||
- [MS-OVBA]: Office VBA File Format Structure | ||
- [MS-CTXLS]: Excel Custom Toolbar Binary File Format | ||
- [MS-XLDM]: Spreadsheet Data Model File Format | ||
- [MS-EXSPXML3]: Excel Calculation Version 2 Web Service XML Schema | ||
- [XLS]: Microsoft Office Excel 97-2007 Binary File Format Specification | ||
Open Document Format for Office Applications Version 1.2 (29 September 2011) | ||
## Badges | ||
[](https://travis-ci.org/SheetJS/js-xlsx) | ||
[](https://coveralls.io/r/SheetJS/js-xlsx?branch=master) | ||
* bottom borders for the cells on the left |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
14362364
71
356