Notes on Worksheet Ranges
This commit is contained in:
parent
7f0bda6af6
commit
9088dfd430
@ -279,7 +279,7 @@ The program will run on ARM64 Windows.
|
||||
| `win10-x64` |`.\out\sheetjs-electron-win32-x64\sheetjs-electron.exe` |
|
||||
| `win11-arm` |`.\out\sheetjs-electron-win32-x64\sheetjs-electron.exe` |
|
||||
| `linux-x64` |`./out/sheetjs-electron-linux-x64/sheetjs-electron` |
|
||||
| `linux-x64` |`./out/sheetjs-electron-linux-arm64/sheetjs-electron` |
|
||||
| `linux-arm` |`./out/sheetjs-electron-linux-arm64/sheetjs-electron` |
|
||||
|
||||
#### Electron API
|
||||
|
||||
|
@ -117,7 +117,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `0.88.0` | 2024-05-28 | |
|
||||
| Windows 10 | `win10-x64` | `0.83.0` | 2024-03-04 | |
|
||||
| Windows 11 | `win11-arm` | `0.88.0` | 2024-05-28 | |
|
||||
| Linux (HoloOS) | `linux-x64` | `0.85.0` | 2024-03-12 | |
|
||||
| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2024-07-07 | |
|
||||
| Linux (Debian) | `linux-arm` | `0.60.0` | 2024-05-23 | Unofficial build[^1] |
|
||||
|
||||
:::
|
||||
@ -138,7 +138,7 @@ cd sheetjs-nwjs
|
||||
"version": "0.0.0",
|
||||
"main": "index.html",
|
||||
"dependencies": {
|
||||
"nw": "0.88.0",
|
||||
"nw": "0.89.0",
|
||||
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
|
||||
}
|
||||
}`}
|
||||
@ -182,9 +182,15 @@ file can be opened in Excel or another spreadsheet editor.
|
||||
5) To build a standalone app, run the builder:
|
||||
|
||||
```bash
|
||||
npx -p nw-builder nwbuild --mode=build --version=0.88.0 --glob=false --outDir=../out ./
|
||||
npx -p nw-builder nwbuild --mode=build --version=0.89.0 --glob=false --outDir=../out ./
|
||||
```
|
||||
|
||||
This will generate the standalone app in the `..\out\` folder.
|
||||
|
||||
6) Launch the generated application:
|
||||
|
||||
| Architecture | Command |
|
||||
|:-------------|:--------------------------------------------------------------|
|
||||
| `linux-x64` | `../out/sheetjs-nwjs` |
|
||||
|
||||
[^1]: The [`nw60-arm64_2022-01-08` release](https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/tag/nw60-arm64_2022-01-08) included an ARM64 version of `nw`.
|
@ -11,17 +11,28 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
:::danger pass
|
||||
|
||||
WebSQL is no longer enabled by default in Chrome. Chrome 123 will officially
|
||||
remove support. For SQL in the browser, there are a few alternatives:
|
||||
WebSQL is no longer supported in Chrome or Safari.
|
||||
|
||||
For SQL in the browser, there are a few alternatives:
|
||||
|
||||
- [SQL.js](/docs/demos/data/sqlite#browser) is a compiled version of SQLite
|
||||
- [AlaSQL](/docs/demos/data/alasql) is a pure-JS SQL engine backed by IndexedDB
|
||||
|
||||
:::
|
||||
|
||||
WebSQL (formally "Web SQL Database") is a popular SQL-based in-browser database
|
||||
available in Chromium and related browsers including Google Chrome. In practice,
|
||||
it is powered by SQLite. Many SQLite-compatible queries work as-is in WebSQL.
|
||||
WebSQL (formally "Web SQL Database") was a popular SQL-based in-browser database
|
||||
available in Chromium and Safari. In practice, it was powered by SQLite. Many
|
||||
SQLite-compatible queries were supported by WebSQL engines.
|
||||
|
||||
:::note Historical Context
|
||||
|
||||
Google and Apple developed and supported WebSQL. Legacy browser vendors fought
|
||||
against standardization and ultimately broke the web by forcing the deprecation
|
||||
of the storied API.
|
||||
|
||||
Leveraging new technologies, many websites ship with an in-browser SQL database.
|
||||
|
||||
:::
|
||||
|
||||
The public demo https://sheetjs.com/sql generates a database from workbook.
|
||||
|
||||
|
@ -17,10 +17,38 @@ Excel supports 4 different types of "sheets":
|
||||
Generic sheets are plain JavaScript objects. Each key that does not start with
|
||||
`!` is an `A1`-style address whose corresponding value is a cell object.
|
||||
|
||||
### Worksheet Range
|
||||
|
||||
The `!ref` property stores the [A1-style range](/docs/csf/general#a1-style-1).
|
||||
|
||||
Functions that work with sheets should use this property to determine the range.
|
||||
Cells that are assigned outside of the range are not processed.
|
||||
|
||||
For example, in the following sparse worksheet, the cell `A3` will be ignored
|
||||
since it is outside of the worksheet range (`A1:B2`):
|
||||
|
||||
```js
|
||||
var ws = {
|
||||
// worksheet range is A1:B2
|
||||
"!ref": "A1:B2",
|
||||
|
||||
// A1 is in the range and will be included
|
||||
"A1": { t: "s", v: "SheetJS" },
|
||||
|
||||
// cell A3 is outside of the range and will be ignored
|
||||
"A3": { t: "n", v: 5433795 },
|
||||
};
|
||||
```
|
||||
|
||||
[Utility functions](/docs/api/utilities/) and functions that handle sheets
|
||||
should test for the presence of the `!ref` field. If the `!ref` is omitted or is
|
||||
not a valid range, functions should treat the sheet as empty.
|
||||
|
||||
### Cell Storage
|
||||
|
||||
By default, the parsers and utility functions generate "sparse-mode" worksheet
|
||||
objects. `sheet[address]` returns the cell object for the specified address.
|
||||
By default, the parsers and utility functions generate "sparse-mode" worksheets.
|
||||
For a given [A1-style address](/docs/csf/general#a1-style), `sheet[ref]` is the
|
||||
corresponding cell object.
|
||||
|
||||
#### Dense Mode
|
||||
|
||||
@ -127,27 +155,13 @@ _`json_to_sheet`_
|
||||
+var sheet = XLSX.utils.json_to_sheet([{x:1,y:2}], {...opts, dense: true});
|
||||
```
|
||||
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
### Sheet Properties
|
||||
|
||||
Each key starts with `!`. The properties are accessible as `sheet[key]`.
|
||||
|
||||
- `sheet['!ref']`: A-1 based range representing the sheet range. Functions that
|
||||
work with sheets should use this parameter to determine the range. Cells that
|
||||
are assigned outside of the range are not processed. In particular, when
|
||||
writing a sheet by hand, cells outside of the range are not included
|
||||
|
||||
Functions that handle sheets should test for the presence of `!ref` field.
|
||||
If the `!ref` is omitted or is not a valid range, functions are free to treat
|
||||
the sheet as empty or attempt to guess the range. The standard utilities that
|
||||
ship with this library treat sheets as empty (for example, the CSV output is
|
||||
empty string).
|
||||
|
||||
When reading a worksheet with the `sheetRows` property set, the ref parameter
|
||||
will use the restricted range. The original range is set at `ws['!fullref']`
|
||||
- `sheet['!ref']`: [A1-style sheet range string](#worksheet-range)
|
||||
|
||||
- `sheet['!margins']`: Object representing the page margins. The default values
|
||||
follow Excel's "normal" preset. Excel also has a "wide" and a "narrow" preset
|
||||
|
@ -14,6 +14,19 @@ features are only accessible by inspecting and modifying the objects directly.
|
||||
This section covers the JS representation of workbooks, worksheets, cells,
|
||||
ranges, addresses and other features.
|
||||
|
||||
:::info Historical Context
|
||||
|
||||
[Web Workers](/docs/demos/bigdata/worker), a popular API for parallelism in the
|
||||
web browser, uses message passing. The "structured clone algorithm"[^1] is used
|
||||
to pass data between the main renderer thread and Worker instances.
|
||||
|
||||
The structured clone algorithm does not preserve functions or prototypes.
|
||||
|
||||
In the SheetJS data model, each structure is a simple object. There are no
|
||||
classes or prototype methods.
|
||||
|
||||
:::
|
||||
|
||||
### Contents
|
||||
|
||||
<ul>{useCurrentSidebarCategory().items.map(globalThis.lambda = (item, index) => {
|
||||
@ -24,4 +37,6 @@ ranges, addresses and other features.
|
||||
<a href={item.href}>{item.label}</a>{item.customProps?.summary && (" - " + item.customProps.summary)}
|
||||
<ul>{item.items && item.items.map(lambda)}</ul>
|
||||
</li>);
|
||||
})}</ul>
|
||||
})}</ul>
|
||||
|
||||
[^1]: See [the HTML Living Standard](https://html.spec.whatwg.org/multipage/structured-data.html#structured-cloning) for more details on the "structured clone algorithm".
|
||||
|
@ -46,7 +46,7 @@ The read functions accept an options argument:
|
||||
|:------------|:--------|:-----------------------------------------------------|
|
||||
|`type` | | [Input data representation](#input-type) |
|
||||
|`raw` | `false` | If true, plain text parsing will not parse values ** |
|
||||
|`dense` | `false` | If true, use a dense worksheet representation ** |
|
||||
|`dense` | `false` | If true, use a [dense sheet representation](#dense) |
|
||||
|`codepage` | | If specified, use code page when appropriate ** |
|
||||
|`cellFormula`| `true` | Save [formulae to the `.f` field](#formulae) |
|
||||
|`cellHTML` | `true` | Parse rich text and save HTML to the `.h` field |
|
||||
@ -93,13 +93,22 @@ The read functions accept an options argument:
|
||||
- `WTF` is mainly for development. By default, the parser will suppress read
|
||||
errors on single worksheets, allowing you to read from the worksheets that do
|
||||
parse properly. Setting `WTF:true` forces those errors to be thrown.
|
||||
- By default, "sparse" mode worksheets are generated. Individual cells are
|
||||
accessed by indexing the worksheet object with an A1-Style address. "dense"
|
||||
worksheets store cells in an array of arrays at `sheet["!data"]`.
|
||||
- `UTC` applies to CSV, Text and HTML formats. When explicitly set to `false`,
|
||||
the parsers will assume the files are specified in local time. By default, as
|
||||
is the case for other file formats, dates and times are interpreted in UTC.
|
||||
|
||||
#### Dense
|
||||
|
||||
The ["Cell Storage"](/docs/csf/sheet#cell-storage) section of the SheetJS Data
|
||||
Model documentation explains the worksheet representation in more detail.
|
||||
|
||||
:::note pass
|
||||
|
||||
[Utility functions that process SheetJS workbook objects](/docs/api/utilities/)
|
||||
typically process both sparse and dense worksheets.
|
||||
|
||||
:::
|
||||
|
||||
#### Range
|
||||
|
||||
Some file formats, including XLSX and XLS, can self-report worksheet ranges. The
|
||||
@ -107,7 +116,9 @@ self-reported ranges are used by default.
|
||||
|
||||
If the `sheetRows` option is set, up to `sheetRows` rows will be parsed from the
|
||||
worksheets. `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).
|
||||
output (since the header row is counted as a row when parsing the data). The
|
||||
`!ref` property of the worksheet will hold the adjusted range. For formats that
|
||||
self-report sheet ranges, the `!fullref` property will hold the original range.
|
||||
|
||||
The `nodim` option instructs the parser to ignore self-reported ranges and use
|
||||
the actual cells in the worksheet to determine the range. This addresses known
|
||||
|
@ -9,7 +9,18 @@ import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
**`XLSX.write(wb, options)`**
|
||||
The main SheetJS method for writing workbooks is `write`. Scripts receive common
|
||||
[JavaScript data representations](#output-type) and are expected to write or
|
||||
share files using platform-specific APIs.
|
||||
|
||||
The `writeFile` helper method accepts a filename and tries to write to a local
|
||||
file using [standard APIs](/docs/demos/local/file).
|
||||
|
||||
**Export a SheetJS workbook object in a specified file format**
|
||||
|
||||
```js
|
||||
var file_data = XLSX.write(wb, opts);
|
||||
```
|
||||
|
||||
`write` attempts to write the workbook `wb` and return the file.
|
||||
|
||||
@ -17,7 +28,11 @@ The `options` argument is required. It must specify
|
||||
- [`bookType`](#supported-output-formats) (file format of the exported file)
|
||||
- [`type`](#output-type) (return value type)
|
||||
|
||||
**`XLSX.writeFile(wb, filename, options)`**
|
||||
**Export a SheetJS workbook object and attempt to write a local file**
|
||||
|
||||
```js
|
||||
XLSX.writeFile(wb, filename, options);
|
||||
```
|
||||
|
||||
`writeFile` attempts to write `wb` to a local file with specified `filename`.
|
||||
|
||||
@ -27,9 +42,16 @@ It also supports NodeJS, ExtendScript applications, and Chromium extensions.
|
||||
If `options` is omitted or if `bookType` is missing from the `options` object,
|
||||
the output file format will be deduced from the filename extension.
|
||||
|
||||
**`XLSX.writeXLSX(wb, options)`**
|
||||
**Special functions for exporting data in the XLSX format**
|
||||
|
||||
**`XLSX.writeFileXLSX(wb, filename, options)`**
|
||||
```js
|
||||
// limited form of `write`
|
||||
var file_data = XLSX.writeXLSX(wb, options);
|
||||
|
||||
|
||||
// limited form of `writeFile`
|
||||
XLSX.writeFileXLSX(wb, filename, options);
|
||||
```
|
||||
|
||||
`writeXLSX` and `writeFileXLSX` are limited versions of `write` and `writeFile`.
|
||||
They support writing to the XLSX file format.
|
||||
@ -42,11 +64,19 @@ more appropriate when exporting to XLS or XLSB or other formats.
|
||||
<details>
|
||||
<summary><b>NodeJS-specific methods</b> (click to show)</summary>
|
||||
|
||||
**`XLSX.writeFileAsync(filename, wb, cb)`**
|
||||
**Export a workbook and attempt to write a local file using `fs.writeFile`**
|
||||
|
||||
**`XLSX.writeFileAsync(filename, wb, options, cb)`**
|
||||
```js
|
||||
// callback equivalent of `XLSX.writeFile`
|
||||
XLSX.writeFileAsync(filename, wb, cb);
|
||||
|
||||
attempt to write `wb` to `filename` and invoke the callback `cb` on completion.
|
||||
// callback equivalent with options argument
|
||||
XLSX.writeFileAsync(filename, wb, options, cb);
|
||||
```
|
||||
|
||||
|
||||
`writeFileAsync` attempts to write `wb` to `filename` and invoke the callback
|
||||
`cb` on completion.
|
||||
|
||||
When an `options` object is specified, it is expected to be the third argument.
|
||||
|
||||
@ -275,6 +305,12 @@ The `type` option specifies the JS form of the output:
|
||||
| `"array"` | ArrayBuffer, fallback array of 8-bit unsigned int |
|
||||
| `"file"` | string: path of file that will be created (nodejs only) |
|
||||
|
||||
- For compatibility with Excel, `csv` output will always include the UTF-8 byte
|
||||
order mark.
|
||||
:::note pass
|
||||
|
||||
For compatibility with Excel, `csv` output will always include the UTF-8 byte
|
||||
order mark ("BOM").
|
||||
|
||||
The raw [`sheet_to_csv` method](/docs/api/utilities/csv#csv-output) will return
|
||||
JavaScript strings without the UTF-8 BOM.
|
||||
|
||||
:::
|
||||
|
Loading…
Reference in New Issue
Block a user