forked from sheetjs/docs.sheetjs.com
wsl
This commit is contained in:
parent
9865fa0037
commit
35a04a6dcf
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
*.bak
|
||||
package-lock.json
|
||||
pnpm-lock.yaml
|
||||
|
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
||||
.PHONY: build
|
||||
build:
|
||||
cd docz; pnpm build; cd ..
|
||||
cd docz; npx -y pnpm build; cd ..
|
||||
rm -rf docs
|
||||
mv docz/build/ docs
|
||||
cp CNAME docs
|
||||
|
@ -262,61 +262,6 @@ stream.pipe(conv); conv.pipe(process.stdout);
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Exporting NUMBERS files</b> (click to show)</summary>
|
||||
|
||||
The NUMBERS writer requires a fairly large base. The supplementary `xlsx.zahl`
|
||||
scripts provide support. `xlsx.zahl.js` is designed for standalone and NodeJS
|
||||
use, while `xlsx.zahl.mjs` is suitable for ESM.
|
||||
|
||||
_Browser_
|
||||
|
||||
```html
|
||||
<meta charset="utf8">
|
||||
<script src="xlsx.full.min.js"></script>
|
||||
<script src="xlsx.zahl.js"></script>
|
||||
<script>
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
["SheetJS", "<3","விரிதாள்"],
|
||||
[72,,"Arbeitsblätter"],
|
||||
[,62,"数据"],
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL, compression: true});
|
||||
</script>
|
||||
```
|
||||
|
||||
_Node_
|
||||
|
||||
```js
|
||||
var XLSX = require("./xlsx.flow");
|
||||
var XLSX_ZAHL = require("./dist/xlsx.zahl");
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
["SheetJS", "<3","விரிதாள்"],
|
||||
[72,,"Arbeitsblätter"],
|
||||
[,62,"数据"],
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL, compression: true});
|
||||
```
|
||||
|
||||
_Deno_
|
||||
|
||||
```ts
|
||||
import * as XLSX from './xlsx.mjs';
|
||||
import XLSX_ZAHL from './dist/xlsx.zahl.mjs';
|
||||
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
["SheetJS", "<3","விரிதாள்"],
|
||||
[72,,"Arbeitsblätter"],
|
||||
[,62,"数据"],
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textports.numbers", {numbers: XLSX_ZAHL, compression: true});
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<https://github.com/sheetjs/sheetaki> pipes write streams to nodejs response.
|
||||
|
||||
### Generating JSON and JS Data
|
||||
|
@ -4,8 +4,13 @@ hide_table_of_contents: true
|
||||
title: Writing Files
|
||||
---
|
||||
|
||||
import current from '/version.js';
|
||||
|
||||
# Writing Options
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
`XLSX.write(wb, write_opts)` attempts to write the workbook `wb`
|
||||
|
||||
`XLSX.writeFile(wb, filename, write_opts)` attempts to write `wb` to `filename`.
|
||||
@ -43,8 +48,88 @@ The write functions accept an options argument:
|
||||
- Due to a bug in the program, some features like "Text to Columns" will crash
|
||||
Excel on worksheets where error conditions are ignored. The writer will mark
|
||||
files to ignore the error by default. Set `ignoreEC` to `false` to suppress.
|
||||
- Due to the size of the data, the NUMBERS data is not included by default. The
|
||||
included `xlsx.zahl.js` and `xlsx.zahl.mjs` scripts include the data.
|
||||
|
||||
<details open>
|
||||
<summary><b>Exporting NUMBERS files</b> (click to show)</summary>
|
||||
|
||||
The NUMBERS writer requires a fairly large base. The supplementary `xlsx.zahl`
|
||||
scripts provide support. `xlsx.zahl.js` is designed for standalone and NodeJS
|
||||
use, while `xlsx.zahl.mjs` is suitable for ESM.
|
||||
|
||||
Adding NUMBERS export support involves two steps:
|
||||
|
||||
1) Load the `xlsx.zahl` script
|
||||
|
||||
2) Pass the payload into the `numbers` option to `write` or `writeFile`.
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="browser" label="Browser">
|
||||
|
||||
<div><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.js`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.zahl.js</a> is the URL for {current}</div>
|
||||
|
||||
<pre><code parentName="pre" {...{"className": "language-html"}}>{`\
|
||||
<meta charset="utf8">\n\
|
||||
<body>\n\
|
||||
<script src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js"></script>\n\
|
||||
<script src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.js"></script>\n\
|
||||
<script>\n\
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([\n\
|
||||
["SheetJS", "<3","விரிதாள்"],\n\
|
||||
[72,,"Arbeitsblätter"],\n\
|
||||
[,62,"数据"],\n\
|
||||
[true,false,],\n\
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");\n\
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});\n\
|
||||
</script>\n\
|
||||
</body>`}</code></pre>
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="nodejs" label="NodeJS">
|
||||
|
||||
After installing the package:
|
||||
|
||||
<pre><code parentName="pre" {...{"className": "language-bash"}}>{`\
|
||||
$ npm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</code></pre>
|
||||
|
||||
The scripts will be available at `xlsx/dist/xlsx.zahl` (CommonJS) and
|
||||
`xlsx/dist/xlsx.zahl.mjs` (ESM).
|
||||
|
||||
```js
|
||||
var XLSX = require("xlsx");
|
||||
var XLSX_ZAHL_PAYLOAD = require("xlsx/dist/xlsx.zahl");
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
["SheetJS", "<3","விரிதாள்"],
|
||||
[72,,"Arbeitsblätter"],
|
||||
[,62,"数据"],
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="deno" label="Deno">
|
||||
|
||||
<div><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.mjs`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.zahl.mjs</a> is the URL for {current}</div>
|
||||
|
||||
<pre><code parentName="pre" {...{"className": "language-ts"}}>{`\
|
||||
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';\n\
|
||||
import XLSX_ZAHL_PAYLOAD from 'https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.mjs';\n\
|
||||
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([\n\
|
||||
["SheetJS", "<3","விரிதாள்"],\n\
|
||||
[72,,"Arbeitsblätter"],\n\
|
||||
[,62,"数据"],\n\
|
||||
[true,false,],\n\
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");\n\
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});\n\
|
||||
`}</code></pre>
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
## Supported Output Formats
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
hide_table_of_contents: true
|
||||
---
|
||||
|
||||
# Contributing
|
||||
@ -32,81 +31,135 @@ Folders:
|
||||
|
||||
After cloning the repo, running `make help` will display a list of commands.
|
||||
|
||||
## Platform-Specific Details
|
||||
## Platform-Specific Setup
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="osx" label="OSX/Linux">
|
||||
<TabItem value="wsl" label="Windows WSL">
|
||||
|
||||
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 add the script:
|
||||
The OSX/Linux workflow works in WSL. Initial setup is involved:
|
||||
|
||||
```bash
|
||||
$ git add xlsx.js
|
||||
$ make clean
|
||||
$ make
|
||||
$ git diff xlsx.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*.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
The included `make.cmd` script will build `xlsx.js` from the `bits` directory.
|
||||
Building is as simple as:
|
||||
|
||||
```cmd
|
||||
> make
|
||||
```
|
||||
|
||||
To prepare development environment:
|
||||
|
||||
```cmd
|
||||
> make init
|
||||
```
|
||||
|
||||
The full list of commands available in Windows are displayed in `make help`:
|
||||
|
||||
```
|
||||
make init -- install deps and global modules
|
||||
make lint -- run eslint linter
|
||||
make test -- run mocha test suite
|
||||
make misc -- run smaller test suite
|
||||
make book -- rebuild README and summary
|
||||
make help -- display this message
|
||||
```
|
||||
|
||||
As explained in [Test Files](./testing#test-files), on Windows the release ZIP file must
|
||||
be downloaded and extracted. If Bash on Windows is available, it is possible
|
||||
to run the OSX/Linux workflow. The following steps prepares the environment:
|
||||
1) Install mercurial and subversion.
|
||||
|
||||
```bash
|
||||
# Install support programs for the build and test commands
|
||||
sudo apt-get install make git subversion mercurial
|
||||
sudo add-apt-repository ppa:mercurial-ppa/releases
|
||||
sudo apt-get update
|
||||
sudo apt-get install mercurial subversion
|
||||
sudo add-apt-repository --remove ppa:mercurial-ppa/releases
|
||||
```
|
||||
|
||||
# Install nodejs and NPM within the WSL
|
||||
wget -qO- https://deb.nodesource.com/setup_8.x | sudo bash
|
||||
sudo apt-get install nodejs
|
||||
2) Install NodeJS
|
||||
|
||||
```bash
|
||||
# Install bootstrap NodeJS and NPM within the WSL
|
||||
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
|
||||
# CLOSE AND REOPEN SHELL BEFORE CONTINUING
|
||||
|
||||
# Switch to `n`-managed NodeJS
|
||||
sudo npm i -g n
|
||||
sudo n 16
|
||||
```
|
||||
|
||||
3) follow <https://github.com/paul-nelson-baker/git-openssl-shellscript> to
|
||||
build and install a version of Git with OpenSSL:
|
||||
|
||||
```bash
|
||||
# Git does not support OpenSSL out of the box, must do this
|
||||
curl -LO https://github.com/paul-nelson-baker/git-openssl-shellscript/raw/main/compile-git-with-openssl.sh
|
||||
chmod +x compile-git-with-openssl.sh
|
||||
./compile-git-with-openssl.sh
|
||||
```
|
||||
|
||||
4) (For deno testing) Install deno:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://deno.land/install.sh | sh
|
||||
```
|
||||
|
||||
(instructions continued in the OSX/Linux part)
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="osx" label="OSX/Linux">
|
||||
|
||||
Initial setup:
|
||||
|
||||
0) Ensure mercurial, subversion, and NodeJS are installed. The WSL instructions
|
||||
will have installed these dependencies, so WSL users can skip to step 1.
|
||||
|
||||
On Linux:
|
||||
|
||||
```bash
|
||||
sudo apt-get install mercurial subversion
|
||||
```
|
||||
|
||||
On MacOS, install using [Homebrew](https://brew.sh/):
|
||||
|
||||
```bash
|
||||
brew install mercurial subversion
|
||||
```
|
||||
|
||||
NodeJS installers can be found at <https://nodejs.org/en/download/>
|
||||
|
||||
1) Install NodeJS modules for building the scripts
|
||||
|
||||
```bash
|
||||
# Install dev dependencies
|
||||
sudo npm install -g mocha voc blanket xlsjs
|
||||
npm install
|
||||
|
||||
# Install global dependencies
|
||||
sudo npm install -g mocha@2.5.3 voc @sheetjs/uglify-js
|
||||
```
|
||||
|
||||
2) Initialize the test files:
|
||||
|
||||
```bash
|
||||
make init
|
||||
```
|
||||
|
||||
This step may take a while as it will be downloading a number of test files.
|
||||
|
||||
3) Run a short test, then run a build
|
||||
|
||||
```bash
|
||||
# Short test
|
||||
make test_misc
|
||||
|
||||
# Full Build
|
||||
cd modules; make; cd ..
|
||||
make dist
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Tests
|
||||
|
||||
The `test_misc` target (`make test_misc` on Linux/OSX / `make misc` on Windows)
|
||||
runs the targeted feature tests. It should take 5-10 seconds to perform feature
|
||||
tests without testing against the entire test battery. New features should be
|
||||
accompanied with tests for the relevant file formats and features.
|
||||
## Development
|
||||
|
||||
The `xlsx.js` and `xlsx.mjs` files are constructed from the files in the `bits`
|
||||
subdirectory. The build script (run `make`) will concatenate the individual
|
||||
bits to produce the scripts.
|
||||
|
||||
To produce the dist files, run `make dist`. The dist files are updated in each
|
||||
version release and *should not be committed between versions*.
|
||||
|
||||
**A note on Older Versions**
|
||||
|
||||
Some of the dependencies are wildly out of date. While SheetJS aims to run in
|
||||
older versions of NodeJS and browsers, some libraries have chosen to break
|
||||
backwards compatibility. The specific versions are used because they are known
|
||||
to work and known to produce consistent results.
|
||||
|
||||
|
||||
## Tests
|
||||
|
||||
The `test_misc` target runs the targeted feature tests. It should take 5-10
|
||||
seconds to perform feature tests without testing against the full test battery.
|
||||
New features should be accompanied with tests for the relevant file formats.
|
||||
|
||||
For tests involving the read side, an appropriate feature test would involve
|
||||
reading an existing file and checking the resulting workbook object. If a
|
||||
|
Loading…
Reference in New Issue
Block a user