5.4 KiB
title | pagination_prev | pagination_next | sidebar_custom_props | ||
---|---|---|---|---|---|
Deno SEA | demos/desktop/index | demos/data/index |
|
import current from '/version.js'; import CodeBlock from '@theme/CodeBlock';
Deno is a JavaScript runtime with support for compiling scripts into self-contained executables.
SheetJS is a JavaScript library for reading and writing data from spreadsheets.
This demo uses the Deno compiler and SheetJS to create a standalone CLI tool for parsing spreadsheets and generating CSV rows.
:::info pass
It is strongly recommended to install Deno on systems using SheetJS libraries in command-line tools. This workaround should only be considered if a standalone binary is considered desirable.
:::
:::caution Deno support is considered experimental.
Great open source software grows with user tests and reports. Any issues should be reported to the Deno project for further diagnosis.
:::
Integration Details
The SheetJS Deno module can be imported from Deno scripts.
deno compile
generates a standalone executable that includes the entire JS
runtime as well as user JS code.
Script Requirements
Scripts that exclusively use SheetJS libraries and Deno built-in modules can be
bundled using deno compile
. The ESM script should be imported directly:
{\ // @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts" import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';
}
For example, the following script accepts one command line argument, parses the
specified file using the SheetJS readFile
method1, generates CSV text from
the first worksheet using sheet_to_csv
2, and prints to terminal:
{\ // @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts" import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'; import * as cptable from 'https://cdn.sheetjs.com/xlsx-${current}/package/dist/cpexcel.full.mjs'; XLSX.set_cptable(cptable); \n\ /* Deno.args[0] is the first argument to the script */ const filename = Deno.args[0]; \n\ /* read file */ const wb = XLSX.readFile(filename); \n\ /* generate CSV of first sheet */ const ws = wb.Sheets[wb.SheetNames[0]]; const csv = XLSX.utils.sheet_to_csv(ws); \n\ /* print to terminal */ console.log(csv);
}
Deno Permissions
The same permissions that apply to normal Deno scripts apply to the compiler:
-
The
--allow-read
option must be specified to allow the program to read files from the filesystem with the SheetJSreadFile
3 method. -
The
--allow-write
option must be specified to allow the program to write files to the filesystem with the SheetJSwriteFile
4 method. -
The
--allow-net
option must be specified to allow the program to download and upload spreadsheets.
More flags can be found in the official permissions list5
Complete Example
:::note Tested Deployments
This demo was last tested in the following deployments:
Architecture | Deno | Date |
---|---|---|
darwin-x64 |
1.43.6 |
2024-05-28 |
darwin-arm |
1.43.6 |
2024-05-23 |
win11-x64 |
1.43.6 |
2024-05-25 |
win11-arm |
2.0.3 |
2024-10-25 |
linux-x64 |
1.41.3 |
2024-03-18 |
linux-arm |
1.43.6 |
2024-05-25 |
:::
:::caution pass
Deno on Windows on ARM uses the X64 compatibility layer. It does not generate a native ARM64 binary!
:::
-
Install Deno.6
-
Download the test file https://docs.sheetjs.com/pres.numbers:
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
- Test the script with
deno run
:
deno run -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts pres.numbers
The script should display CSV contents from the first sheet:
Name,Index
Bill Clinton,42
GeorgeW Bush,43
Barack Obama,44
Donald Trump,45
Joseph Biden,46
:::info pass
In newer versions of Deno, importing from a URL requires import permissions:
deno run -r --allow-read --allow-import https://docs.sheetjs.com/cli/sheet2csv.ts pres.numbers
:::
- Compile and run
sheet2csv
:
deno compile -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts
./sheet2csv pres.numbers
The program should display the same CSV contents as the script (from step 2)
:::info pass
In newer versions of Deno, importing from a URL requires import permissions:
deno compile -r --allow-read --allow-import https://docs.sheetjs.com/cli/sheet2csv.ts
./sheet2csv pres.numbers
:::
-
See "Permissions list" in the official Deno documentation ↩︎
-
The official instructions cover most platforms. Deno does not provide official Linux ARM64 builds, but there are unofficial community builds. ↩︎