forked from sheetjs/docs.sheetjs.com
		
	error
This commit is contained in:
		
							parent
							
								
									8e39ab8f33
								
							
						
					
					
						commit
						871acac297
					
				| @ -57,6 +57,25 @@ new versions are released! | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::caution Snyk Bugs | ||||
| 
 | ||||
| Snyk security tooling may report errors involving "Prototype Pollution": | ||||
| 
 | ||||
| ``` | ||||
| Prototype Pollution [Medium Severity][https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926] | ||||
| ``` | ||||
| 
 | ||||
| As noted in the [Snyk report](https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926): | ||||
| 
 | ||||
| > The issue is resolved in version 0.19.3 | ||||
| 
 | ||||
| **Snyk is falsely reporting vulnerabilities. It is a bug in the Snyk tooling.** | ||||
| 
 | ||||
| Until Snyk fixes the bugs, the official recommendation is to | ||||
| [suppress the warning](https://snyk.io/blog/ignoring-vulnerabilities-with-snyk/). | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### Legacy Endpoints | ||||
| 
 | ||||
| :::warning pass | ||||
|  | ||||
| @ -47,6 +47,25 @@ new versions are released! | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::caution Snyk Bugs | ||||
| 
 | ||||
| Snyk security tooling may report errors involving "Prototype Pollution": | ||||
| 
 | ||||
| ``` | ||||
| Prototype Pollution [Medium Severity][https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926] | ||||
| ``` | ||||
| 
 | ||||
| As noted in the [Snyk report](https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926): | ||||
| 
 | ||||
| > The issue is resolved in version 0.19.3 | ||||
| 
 | ||||
| **Snyk is falsely reporting vulnerabilities. It is a bug in the Snyk tooling.** | ||||
| 
 | ||||
| Until Snyk fixes the bugs, the official recommendation is to | ||||
| [suppress the warning](https://snyk.io/blog/ignoring-vulnerabilities-with-snyk/). | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### Legacy Endpoints | ||||
| 
 | ||||
| :::warning pass | ||||
|  | ||||
| @ -7,9 +7,9 @@ Cell objects are plain JS objects with keys and values following the convention: | ||||
| 
 | ||||
| | Key | Description                                                            | | ||||
| | --- | ---------------------------------------------------------------------- | | ||||
| |     | **Core Cell Properties** ([More Info](#data-types))                    | | ||||
| | `t` | type: `b` Boolean, `e` Error, `n` Number, `d` Date, `s` Text, `z` Stub | | ||||
| | `v` | raw value (number, string, Date object, boolean)                       | | ||||
| |     | **Core Cell Properties**                                               | | ||||
| | `t` | cell type ([more info](#cell-types))                                   | | ||||
| | `v` | underlying value ([more info](#underlying-values))                     | | ||||
| |     | **Number Formats** ([More Info](/docs/csf/features/nf))                | | ||||
| | `z` | number format string associated with the cell (if requested)           | | ||||
| | `w` | formatted text (if applicable)                                         | | ||||
| @ -24,21 +24,50 @@ Cell objects are plain JS objects with keys and values following the convention: | ||||
| | `h` | HTML rendering of the rich text (if applicable)                        | | ||||
| | `s` | the style/theme of the cell (if applicable)                            | | ||||
| 
 | ||||
| Cell objects are expected to have a type (`t` property). | ||||
| Cell objects are expected to have a type (`t` property). Cells with values are | ||||
| expected to store the values in the `v` property. The cell type influences the | ||||
| interpretation of cell values. | ||||
| 
 | ||||
| Built-in utilities that use formatted text (such as the CSV exporter) will use | ||||
| the `w` text if available. When programmatically changing values, the `w` text | ||||
| should be deleted before attempting to export. Utilities will regenerate the `w` | ||||
| text from the number format (`cell.z`) and the raw value if possible. | ||||
| ## Content and Presentation | ||||
| 
 | ||||
| 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. | ||||
| Spreadsheets typically separate "content" from "presentation". A cell with a | ||||
| value of `$3.50` is typically stored as a numeric cell with an underlying value | ||||
| of `3.5` and a number format such as `$0.00` | ||||
| 
 | ||||
| ### Data Types | ||||
| The cell type is stored in the `t` property of the cell. | ||||
| 
 | ||||
| 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: | ||||
| The underlying value, representing a JavaScript equivalent of the spreadsheet | ||||
| "content", is stored in the `v` property of the cell. | ||||
| 
 | ||||
| The number format string is stored in the `z` property of the cell. | ||||
| 
 | ||||
| The SheetJS number formatting library will generate formatted text. It will be | ||||
| stored in the `w` property of the cell. | ||||
| 
 | ||||
| For this example, the SheetJS cell representation will be | ||||
| 
 | ||||
| ```js | ||||
| var cell = { | ||||
|   t: "n",     // numeric cell | ||||
|   v: 3.5,     // underlying value 3.5 | ||||
|   z: "$0.00", // number format $0.00 | ||||
|   w: "$3.50"  // formatted text | ||||
| }; | ||||
| ``` | ||||
| 
 | ||||
| Parsers for most common formats will typically generate formatted text at parse | ||||
| time and skip the original number formats. There are options to preserve the | ||||
| number formats and skip formatted text generation. | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| ["Number Formats"](/docs/csf/features/nf) discusses formatting in more detail. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Cell Types | ||||
| 
 | ||||
| There are 6 SheetJS cell types: | ||||
| 
 | ||||
| | Type | Description                                                           | | ||||
| | :--: | :-------------------------------------------------------------------- | | ||||
| @ -75,15 +104,146 @@ the core library data processing utility functions.  By default these cells are | ||||
| not generated; the parser `sheetStubs` option must be set to `true`. | ||||
| 
 | ||||
| Type `e` is the Error type. The `v` field holds numeric error codes, while `w` | ||||
| holds the error message.  Acceptable values are listed below: | ||||
| holds the error message. Valid values are listed [in the "Error" table](#error). | ||||
| 
 | ||||
| |  Value | Error Meaning   | | ||||
| | -----: | :-------------- | | ||||
| | `0x00` | `#NULL!`        | | ||||
| | `0x07` | `#DIV/0!`       | | ||||
| | `0x0F` | `#VALUE!`       | | ||||
| | `0x17` | `#REF!`         | | ||||
| | `0x1D` | `#NAME?`        | | ||||
| | `0x24` | `#NUM!`         | | ||||
| | `0x2A` | `#N/A`          | | ||||
| | `0x2B` | `#GETTING_DATA` | | ||||
| ## Underlying Values | ||||
| 
 | ||||
| Spreadsheet conventions do not always line up with JavaScript conventions. The | ||||
| library attempts to translate between Excel values and JavaScript primitives. | ||||
| 
 | ||||
| ### Excel Values | ||||
| 
 | ||||
| Each value in Excel has a type which can be displayed with the `TYPE` function. | ||||
| There are four scalar types: | ||||
| 
 | ||||
| | Description            | Example   | Formula Expression  | Result | | ||||
| |:-----------------------|:----------|:--------------------|-------:| | ||||
| | Number / Date / Blank  | `54337`   | `=TYPE(54337)`      |    `1` | | ||||
| | Text                   | `SheetJS` | `=TYPE("SheetJS")`  |    `2` | | ||||
| | Boolean (Logical)      | `TRUE`    | `=TYPE(TRUE)`       |    `4` | | ||||
| | Error                  | `#VALUE!` | `=TYPE(#VALUE!)`    |   `16` | | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| Lotus 1-2-3, Excel, and other spreadsheet software typically store dates as | ||||
| numbers and use the number format to determine if values represent dates. | ||||
| See ["Dates and Times"](/docs/csf/features/dates) for more info. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| #### Number | ||||
| 
 | ||||
| Each valid Excel number can be represented as a JavaScript number primitive.[^1] | ||||
| 
 | ||||
| SheetJS libraries normally generate JavaScript numbers. For cells with date-like | ||||
| number formats[^2], there are options to generate JavaScript `Date` objects. | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| Excel displays exponential numbers with an uppercase `E` while JavaScript | ||||
| numbers are traditionally displayed with a lowercase `e`. Even though the | ||||
| underlying values may appear different, they are functionally identical. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| #### Text | ||||
| 
 | ||||
| Each valid Excel string can be represented as a JavaScript string primitive. | ||||
| SheetJS libraries generate JavaScript strings. | ||||
| 
 | ||||
| #### Boolean | ||||
| 
 | ||||
| There are two Boolean values: "true" and "false". | ||||
| 
 | ||||
| Excel renders the Boolean values in uppercase: `TRUE` and `FALSE` | ||||
| 
 | ||||
| JavaScript renders Boolean literals in lowercase: `true` and `false` | ||||
| 
 | ||||
| SheetJS libraries generate the JavaScript form. The formatted text will be the | ||||
| uppercase `TRUE` or `FALSE`, matching Excel rendering. | ||||
| 
 | ||||
| #### Error | ||||
| 
 | ||||
| The underlying value for an Excel error is a number. The supported error types | ||||
| and numeric values are listed below: | ||||
| 
 | ||||
| | Excel Error     |  Value | | ||||
| | :-------------- | -----: | | ||||
| | `#NULL!`        | `0x00` | | ||||
| | `#DIV/0!`       | `0x07` | | ||||
| | `#VALUE!`       | `0x0F` | | ||||
| | `#REF!`         | `0x17` | | ||||
| | `#NAME?`        | `0x1D` | | ||||
| | `#NUM!`         | `0x24` | | ||||
| | `#N/A`          | `0x2A` | | ||||
| | `#GETTING_DATA` | `0x2B` | | ||||
| 
 | ||||
| SheetJS parsers mark the cell type of error cells and store the listed numeric | ||||
| value. The formatted text will be the error string shown in Excel. | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| `#SPILL!`, `#CONNECT!`, and `#BLOCKED!` errors are saved to files as `#VALUE!`. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### JavaScript Values | ||||
| 
 | ||||
| Each primitive value in JavaScript has a type which can be displayed with the | ||||
| `typeof` operator. There are 5 types in the ECMAScript 5 dialect of JavaScript: | ||||
| 
 | ||||
| | Type      | Example     | `typeof`      | | ||||
| |:----------|:------------|:--------------| | ||||
| | Undefined | `undefined` | `"undefined"` | | ||||
| | Null      | `null`      | `"null"`      | | ||||
| | Boolean   | `true`      | `"boolean"`   | | ||||
| | String    | `"SheetJS"` | `"string"`    | | ||||
| | Number    | `5433795`   | `"number"`    | | ||||
| 
 | ||||
| #### Null and Undefined | ||||
| 
 | ||||
| `undefined` in JavaScript is spiritually equivalent to a blank cell value in | ||||
| Excel. By default, SheetJS methods that generate worksheets skip `undefined`. | ||||
| 
 | ||||
| `null` in JavaScript typically is used to represent no data. The `#NULL!` error | ||||
| in Excel is intended to break formula expressions that reference the cells[^3]. | ||||
| By default, SheetJS methods that generate worksheets skip `null`. Some methods | ||||
| include options to generate `#NULL!` error cells. | ||||
| 
 | ||||
| #### Boolean | ||||
| 
 | ||||
| There are two Boolean values: "true" and "false". | ||||
| 
 | ||||
| SheetJS libraries map JavaScript `true` / `false` literals to Excel `TRUE` / | ||||
| `FALSE` Boolean values. | ||||
| 
 | ||||
| #### String | ||||
| 
 | ||||
| The underlying value of a JavaScript string is always the original string. | ||||
| 
 | ||||
| SheetJS export methods will shorten or re-encode strings as necessary to export | ||||
| valid strings for the requested file formats. | ||||
| 
 | ||||
| #### Number | ||||
| 
 | ||||
| The underlying value of a JavaScript number is always the original number. | ||||
| 
 | ||||
| SheetJS export methods will translate supported numbers to numeric cells. `NaN` | ||||
| values will be translated to Excel `#NUM!` errors. Infinities and subnormal | ||||
| values are translated to `#DIV/0!`. | ||||
| 
 | ||||
| #### Dates | ||||
| 
 | ||||
| :::note pass | ||||
| 
 | ||||
| JavaScript `Date` objects are Objects. They can be distinguished from other | ||||
| Objects with the `instanceof` operator. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| SheetJS date cells can hold Date objects. When exporting workbooks to formats | ||||
| that do not have native Date types, the values will be translated to date codes. | ||||
| 
 | ||||
| [^1]: Each valid Excel number can be represented as an IEEE754 double. Excel does not support denormalized numbers, the `NaN` family, `Infinity`, or `-Infinity`. See ["Floating-point arithmetic may give inaccurate results in Excel"](https://learn.microsoft.com/en-us/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result) in the Excel documentation for more information. | ||||
| [^2]: The table in ["Dates and Times" section of "Number Formats"](/docs/csf/features/nf#dates-and-times) lists the tokens that SheetJS uses to determine if a cell value should be treated as a Date. | ||||
| [^3]: [`NULL` function](https://support.microsoft.com/en-us/office/null-function-c7fb4579-e8aa-4883-a8e3-2b8055100e39) in the Excel documentation explains the intended use case. | ||||
| @ -362,4 +362,11 @@ desired format and testing with [the Number Format Strings demo](#number-format- | ||||
| 
 | ||||
| [**This feature is discussed in the HTML utilities section**](/docs/api/utilities/html#value-override) | ||||
| 
 | ||||
| ### Plaintext Export | ||||
| 
 | ||||
| Built-in utilities that use formatted text (such as the CSV exporter) will use | ||||
| the `w` text if available. When programmatically changing values, the `w` text | ||||
| should be deleted before attempting to export. Utilities will regenerate the `w` | ||||
| text from the number format (`cell.z`) and the raw value if possible. | ||||
| 
 | ||||
| [^1]: On 2023 September 14, [the "Review guidelines for customizing a number format" page](https://support.microsoft.com/en-us/office/review-guidelines-for-customizing-a-number-format-c0a1d1fa-d3f4-4018-96b7-9c9354dd99f5) in the Excel documentation covered custom number format minutiae. | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user