151 lines
6.4 KiB
Markdown
151 lines
6.4 KiB
Markdown
|
---
|
||
|
sidebar_position: 1
|
||
|
---
|
||
|
|
||
|
# Core Concepts
|
||
|
|
||
|
The "Common Spreadsheet Format" (CSF) is the object model used by SheetJS.
|
||
|
|
||
|
## Cell Addresses and Ranges
|
||
|
|
||
|
Cell address objects are stored as `{c:C, r:R}` where `C` and `R` are 0-indexed
|
||
|
column and row numbers, respectively. For example, the cell address `B5` is
|
||
|
represented by the object `{c:1, r:4}`.
|
||
|
|
||
|
Cell range objects are stored as `{s:S, e:E}` where `S` is the first cell and
|
||
|
`E` is the last cell in the range. The ranges are inclusive. For example, the
|
||
|
range `A3:B7` is represented by the object `{s:{c:0, r:2}, e:{c:1, r:6}}`.
|
||
|
Utility functions perform a row-major order walk traversal of a sheet range:
|
||
|
|
||
|
```js
|
||
|
for(var R = range.s.r; R <= range.e.r; ++R) {
|
||
|
for(var C = range.s.c; C <= range.e.c; ++C) {
|
||
|
var cell_address = {c:C, r:R};
|
||
|
/* if an A1-style address is needed, encode the address */
|
||
|
var cell_ref = XLSX.utils.encode_cell(cell_address);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Cell Object
|
||
|
|
||
|
Cell objects are plain JS objects with keys and values following the convention:
|
||
|
|
||
|
| Key | Description |
|
||
|
| --- | ---------------------------------------------------------------------- |
|
||
|
| `v` | raw value (see [Data Types](#data-types) section for more info) |
|
||
|
| `w` | formatted text (if applicable) |
|
||
|
| `t` | type: `b` Boolean, `e` Error, `n` Number, `d` Date, `s` Text, `z` Stub |
|
||
|
| `f` | cell formula encoded as an A1-style string (if applicable) |
|
||
|
| `F` | range of enclosing array if formula is array formula (if applicable) |
|
||
|
| `D` | if true, array formula is dynamic (if applicable) |
|
||
|
| `r` | rich text encoding (if applicable) |
|
||
|
| `h` | HTML rendering of the rich text (if applicable) |
|
||
|
| `c` | comments associated with the cell |
|
||
|
| `z` | number format string associated with the cell (if requested) |
|
||
|
| `l` | cell hyperlink object (`.Target` holds link, `.Tooltip` is tooltip) |
|
||
|
| `s` | the style/theme of the cell (if applicable) |
|
||
|
|
||
|
Built-in export utilities (such as the CSV exporter) will use the `w` text if it
|
||
|
is available. To change a value, be sure to delete `cell.w` (or set it to
|
||
|
`undefined`) before attempting to export. The utilities will regenerate the `w`
|
||
|
text from the number format (`cell.z`) and the raw value if possible.
|
||
|
|
||
|
The actual array formula is stored in the `f` field of the first cell in the
|
||
|
array range. Other cells in the range will omit the `f` field.
|
||
|
|
||
|
### Data Types
|
||
|
|
||
|
The raw value is stored in the `v` value property, interpreted based on the `t`
|
||
|
type property. This separation allows for representation of numbers as well as
|
||
|
numeric text. There are 6 valid cell types:
|
||
|
|
||
|
| Type | Description |
|
||
|
| :--: | :-------------------------------------------------------------------- |
|
||
|
| `b` | Boolean: value interpreted as JS `boolean` |
|
||
|
| `e` | Error: value is a numeric code and `w` property stores common name ** |
|
||
|
| `n` | Number: value is a JS `number` ** |
|
||
|
| `d` | Date: value is a JS `Date` object or string to be parsed as Date ** |
|
||
|
| `s` | Text: value interpreted as JS `string` and written as text ** |
|
||
|
| `z` | Stub: blank stub cell that is ignored by data processing utilities ** |
|
||
|
|
||
|
<details>
|
||
|
<summary><b>Error values and interpretation</b> (click to show)</summary>
|
||
|
|
||
|
| Value | Error Meaning |
|
||
|
| -----: | :-------------- |
|
||
|
| `0x00` | `#NULL!` |
|
||
|
| `0x07` | `#DIV/0!` |
|
||
|
| `0x0F` | `#VALUE!` |
|
||
|
| `0x17` | `#REF!` |
|
||
|
| `0x1D` | `#NAME?` |
|
||
|
| `0x24` | `#NUM!` |
|
||
|
| `0x2A` | `#N/A` |
|
||
|
| `0x2B` | `#GETTING_DATA` |
|
||
|
|
||
|
</details>
|
||
|
|
||
|
Type `n` is the Number type. This includes all forms of data that Excel stores
|
||
|
as numbers, such as dates/times and Boolean fields. Excel exclusively uses data
|
||
|
that can be fit in an IEEE754 floating point number, just like JS Number, so the
|
||
|
`v` field holds the raw number. The `w` field holds formatted text. Dates are
|
||
|
stored as numbers by default and converted with `XLSX.SSF.parse_date_code`.
|
||
|
|
||
|
Type `d` is the Date type, generated only when the option `cellDates` is passed.
|
||
|
Since JSON does not have a natural Date type, parsers are generally expected to
|
||
|
store ISO 8601 Date strings like you would get from `date.toISOString()`. On
|
||
|
the other hand, writers and exporters should be able to handle date strings and
|
||
|
JS Date objects. Note that Excel disregards timezone modifiers and treats all
|
||
|
dates in the local timezone. The library does not correct for this error.
|
||
|
|
||
|
Type `s` is the String type. Values are explicitly stored as text. Excel will
|
||
|
interpret these cells as "number stored as text". Generated Excel files
|
||
|
automatically suppress that class of error, but other formats may elicit errors.
|
||
|
|
||
|
Type `z` represents blank stub cells. They are generated in cases where cells
|
||
|
have no assigned value but hold comments or other metadata. They are ignored by
|
||
|
the core library data processing utility functions. By default these cells are
|
||
|
not generated; the parser `sheetStubs` option must be set to `true`.
|
||
|
|
||
|
|
||
|
#### Dates
|
||
|
|
||
|
<details>
|
||
|
<summary><b>Excel Date Code details</b> (click to show)</summary>
|
||
|
|
||
|
By default, Excel stores dates as numbers with a format code that specifies date
|
||
|
processing. For example, the date `19-Feb-17` is stored as the number `42785`
|
||
|
with a number format of `d-mmm-yy`. The `SSF` module understands number formats
|
||
|
and performs the appropriate conversion.
|
||
|
|
||
|
XLSX also supports a special date type `d` where the data is an ISO 8601 date
|
||
|
string. The formatter converts the date back to a number.
|
||
|
|
||
|
The default behavior for all parsers is to generate number cells. Setting
|
||
|
`cellDates` to true will force the generators to store dates.
|
||
|
|
||
|
</details>
|
||
|
|
||
|
<details>
|
||
|
<summary><b>Time Zones and Dates</b> (click to show)</summary>
|
||
|
|
||
|
Excel has no native concept of universal time. All times are specified in the
|
||
|
local time zone. Excel limitations prevent specifying true absolute dates.
|
||
|
|
||
|
Following Excel, this library treats all dates as relative to local time zone.
|
||
|
|
||
|
</details>
|
||
|
|
||
|
<details>
|
||
|
<summary><b>Epochs: 1900 and 1904</b> (click to show)</summary>
|
||
|
|
||
|
Excel supports two epochs (January 1 1900 and January 1 1904).
|
||
|
The workbook's epoch can be determined by examining the workbook's
|
||
|
`wb.Workbook.WBProps.date1904` property:
|
||
|
|
||
|
```js
|
||
|
!!(((wb.Workbook||{}).WBProps||{}).date1904)
|
||
|
```
|
||
|
|
||
|
</details>
|