README.md 6.2 KB
Newer Older
S
initial  
SheetJS 已提交
1 2
# xlsx

3
Currently a parser for XLSX/XLSM/XLSB files.  Cleanroom implementation from the
4
ISO 29500  Office Open XML specifications, [MS-XLSB], and related documents.
S
initial  
SheetJS 已提交
5 6 7 8 9 10 11 12 13

## Installation

In node:

    npm install xlsx

In the browser:

S
SheetJS 已提交
14
    <!-- JSZip must be included before xlsx.js -->
S
initial  
SheetJS 已提交
15 16 17 18 19
    <script lang="javascript" src="/path/to/jszip.js"></script>
    <script lang="javascript" src="/path/to/xlsx.js"></script>

## Usage

S
SheetJS 已提交
20
Simple usage (walks through every cell of every sheet and dumps the values):
S
initial  
SheetJS 已提交
21 22 23 24 25

    var XLSX = require('xlsx')
    var xlsx = XLSX.readFile('test.xlsx');
    var sheet_name_list = xlsx.SheetNames;
    xlsx.SheetNames.forEach(function(y) {
K
typo  
kawanet 已提交
26
      for (z in xlsx.Sheets[y]) {
S
initial  
SheetJS 已提交
27
        if(z[0] === '!') continue;
K
typo  
kawanet 已提交
28
        console.log(y + "!" + z + "=" + JSON.stringify(xlsx.Sheets[y][z].v));
S
initial  
SheetJS 已提交
29 30 31
      }
    });

S
SheetJS 已提交
32 33 34 35 36 37 38 39
The node version installs a binary `xlsx2csv` which can read XLSX/XLSM/XLSB files and output the contents in various formats.  The source is available at `xlsx2csv.njs` in the bin directory.

See <http://oss.sheetjs.com/js-xlsx/> for a browser example.

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 by running:

    $ <target_file.xlsx base64 | pbcopy # the pbcopy puts the content in the clipboard

S
SheetJS 已提交
40 41
Some helper functions in `XLSX.utils` generate different views of the sheets:

42
- `XLSX.utils.sheet_to_csv` generates CSV
S
SheetJS 已提交
43 44 45
- `XLSX.utils.sheet_to_row_object_array` interprets sheets as tables with a header column and generates an array of objects
- `XLSX.utils.get_formulae` generates a list of formulae

S
SheetJS 已提交
46 47 48 49 50 51
For more details:

- `bin/xlsx2csv.njs` is a tool for node
- `index.html` is the live demo
- `bits/90_utils.js` contains the logic for generating CSV and JSON from sheets

52
## Cell Object Description
S
SheetJS 已提交
53 54 55 56

`.SheetNames` is an ordered list of the sheets in the workbook

`.Sheets[sheetname]` returns a data structure representing the sheet.  Each key
57
that does not start with `!` corresponds to a cell (using `A-1` notation).
S
SheetJS 已提交
58

59 60
`.Sheets[sheetname][address]` returns the specified cell:

S
SheetJS 已提交
61 62 63 64 65 66 67
- `.v` : the raw value of the cell
- `.w` : the formatted text of the cell (if applicable)
- `.t` : the type of the cell (constrained to the enumeration `ST_CellType` as documented in page 4215 of ISO/IEC 29500-1:2012(E) )
- `.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
68
- `.z` : the number format string associated with the cell (if requested)
69 70

For dates, `.v` holds the raw date code from the sheet and `.w` holds the text
S
SheetJS 已提交
71

S
SheetJS 已提交
72
## Options
S
SheetJS 已提交
73

S
SheetJS 已提交
74 75 76 77
The exported `read` and `readFile` functions accept an options argument:

| Option Name | Default | Description |
| :---------- | ------: | :---------- |
S
SheetJS 已提交
78 79
| cellFormula | true    | Save formulae to the .f field ** |
| cellHTML    | true    | Parse rich text and save HTML to the .h field |
S
SheetJS 已提交
80
| cellNF      | false   | Save number format string to the .z field |
S
SheetJS 已提交
81
| sheetStubs  | false   | Create cell objects for stub cells |
S
SheetJS 已提交
82
| bookProps   | false   | If true, only parse enough to get book metadata ** |
83
| bookSheets  | false   | If true, only parse enough to get the sheet names |
S
SheetJS 已提交
84 85 86 87

- `cellFormula` only applies to constructing XLSB formulae.  XLSX/XLSM formulae
  are stored in plaintext, but XLSB formulae are stored in a binary format.
- Even if `cellNF` is false, formatted text (.w) will be generated
88
- In some cases, sheets may be parsed even if `bookSheets` is false.
S
SheetJS 已提交
89
- `bookSheets` and `bookProps` combine to give both sets of information
S
SheetJS 已提交
90

91
The defaults are enumerated in bits/84_defaults.js
S
SheetJS 已提交
92

S
SheetJS 已提交
93 94 95 96 97 98 99 100 101 102 103
## Tested Environments

 - Node 0.8.14, 0.10.1
 - IE 6/7/8/9/10 using Base64 mode (IE10 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 node
 - <https://travis-ci.org/SheetJS/SheetJS.github.io> for XLS* modules
104
 - <https://saucelabs.com/u/sheetjs> for XLS* modules using Sauce Labs
S
SheetJS 已提交
105

S
SheetJS 已提交
106 107
## Test Files

S
SheetJS 已提交
108
Test files are housed in [another repo](https://github.com/SheetJS/test_files).
S
SheetJS 已提交
109

110 111 112 113 114 115 116 117 118 119 120 121 122
## 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`):

```
$ 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
```

S
SheetJS 已提交
123 124
## Contributing

125
Due to the precarious nature of the Open Specifications Promise, it is very important to ensure code is cleanroom.  Consult CONTRIBUTING.md
S
SheetJS 已提交
126

S
SheetJS 已提交
127 128 129 130
## XLS Support

XLS is available in [js-xls](https://github.com/SheetJS/js-xls).

S
initial  
SheetJS 已提交
131 132
## License

S
SheetJS 已提交
133 134 135
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.
S
initial  
SheetJS 已提交
136 137 138 139

## References

ISO/IEC 29500:2012(E) "Information technology — Document description and processing languages — Office Open XML File Formats"
S
SheetJS 已提交
140

S
SheetJS 已提交
141 142 143
OSP-covered specifications:

 - [MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format
144
 - [MS-XLSB]: Excel (.xlsb) Binary File Format
145
 - [MS-OE376]: Office Implementation Information for ECMA-376 Standards Support
S
SheetJS 已提交
146

S
SheetJS 已提交
147 148 149 150 151 152
## Badges

[![Build Status](https://travis-ci.org/SheetJS/js-xlsx.png?branch=master)](https://travis-ci.org/SheetJS/js-xlsx)

[![Coverage Status](https://coveralls.io/repos/SheetJS/js-xlsx/badge.png?branch=master)](https://coveralls.io/r/SheetJS/js-xlsx?branch=master)

S
SheetJS 已提交
153 154
[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/ed5bb2c4c4346a474fef270f847f3f78 "githalytics.com")](http://githalytics.com/SheetJS/js-xlsx)