ruby+bun
This commit is contained in:
parent
4fd04640ae
commit
18bfc66fac
@ -184,9 +184,10 @@ This demo was tested in the following environments:
|
||||
|
||||
| OS and Version | Arch | Electron | Date |
|
||||
|:---------------|:-----|:---------|:-----------|
|
||||
| macOS 13.5.1 | ARM | `26.1.0` | 2023-09-03 |
|
||||
| macOS 13.5.1 | x64 | `26.1.0` | 2023-09-03 |
|
||||
| macOS 13.5.1 | ARM | `26.1.0` | 2023-09-03 |
|
||||
| Windows 10 | x64 | `26.1.0` | 2023-09-03 |
|
||||
| Windows 10 | ARM | `26.1.0` | 2023-09-24 |
|
||||
| Linux (HoloOS) | x64 | `26.1.0` | 2023-09-03 |
|
||||
| Linux (Debian) | ARM | `26.1.0` | 2023-09-03 |
|
||||
|
||||
@ -254,6 +255,13 @@ On Linux, the packaging step may require additional dependencies[^1]
|
||||
|
||||
:::
|
||||
|
||||
:::info pass
|
||||
|
||||
When the demo was last tested on Windows ARM, the generated binary targeted x64.
|
||||
The program will run on ARM64 Windows.
|
||||
|
||||
:::
|
||||
|
||||
**Testing**
|
||||
|
||||
5) Download [the test file `pres.numbers`](https://sheetjs.com/pres.numbers)
|
||||
|
@ -109,7 +109,14 @@ input.click();
|
||||
|
||||
:::note
|
||||
|
||||
This demo was tested against NW.js 0.78.0 on 2023 July 27.
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| OS and Version | Arch | NW.js | Date |
|
||||
|:---------------|:-----|:---------|:-----------|
|
||||
| macOS 13.4.1 | x64 | `0.78.0` | 2023-07-27 |
|
||||
| Windows 10 | x64 | `0.78.0` | 2023-07-27 |
|
||||
| Windows 10 | ARM | `0.80.0` | 2023-09-25 |
|
||||
| Linux (HoloOS) | x64 | `0.78.0` | 2023-07-27 |
|
||||
|
||||
:::
|
||||
|
||||
@ -122,7 +129,7 @@ This demo was tested against NW.js 0.78.0 on 2023 July 27.
|
||||
"version": "0.0.0",
|
||||
"main": "index.html",
|
||||
"dependencies": {
|
||||
"nw": "~0.73.0",
|
||||
"nw": "~0.80.0",
|
||||
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
|
||||
}
|
||||
}`}
|
||||
@ -157,7 +164,7 @@ the file input element to select a spreadsheet and clicking the export button.
|
||||
5) To build a standalone app, run the builder:
|
||||
|
||||
```bash
|
||||
npx -p nw-builder nwbuild --mode=build .
|
||||
npx -p nw-builder nwbuild --mode=build --glob=false --outDir=../out ./
|
||||
```
|
||||
|
||||
This will generate the standalone app in the `build\sheetjs-nwjs\` folder.
|
||||
This will generate the standalone app in the `..\build\sheetjs-nwjs\` folder.
|
@ -300,7 +300,9 @@ This demo was tested in the following environments:
|
||||
| macOS 12.6.3 | x64 | `v2.5.1` | 2023-08-24 |
|
||||
| macOS 13.5.1 | ARM | `v2.5.1` | 2023-08-24 |
|
||||
| Windows 10 | x64 | `v2.5.1` | 2023-08-25 |
|
||||
| Windows 11 | ARM | `v2.6.0` | 2023-09-25 |
|
||||
| Linux (HoloOS) | x64 | `v2.5.1` | 2023-08-25 |
|
||||
| Linux (Debian) | ARM | `v2.6.0` | 2023-09-25 |
|
||||
|
||||
:::
|
||||
|
||||
@ -369,7 +371,7 @@ cd sheetjs-wails
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
cd frontend
|
||||
curl -L -o src/assets/logo.png https://sheetjs.com/sketch1024.png
|
||||
curl -o src/assets/logo.png https://sheetjs.com/sketch1024.png
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
cd ..`}
|
||||
</CodeBlock>
|
||||
@ -381,8 +383,8 @@ cd ..`}
|
||||
`frontend/src/App.svelte`
|
||||
|
||||
```bash
|
||||
curl -L -o app.go https://docs.sheetjs.com/wails/app.go
|
||||
curl -L -o frontend/src/App.svelte https://docs.sheetjs.com/wails/App.svelte
|
||||
curl -o app.go https://docs.sheetjs.com/wails/app.go
|
||||
curl -o frontend/src/App.svelte https://docs.sheetjs.com/wails/App.svelte
|
||||
```
|
||||
|
||||
5) Build the app with
|
||||
|
@ -257,8 +257,8 @@ This demo was tested in the following environments:
|
||||
|
||||
| OS and Version | Arch | Tauri | Date |
|
||||
|:---------------|:-----|:---------|:-----------|
|
||||
| macOS 13.4.1 | ARM | `v1.4.0` | 2023-06-29 |
|
||||
| macOS 13.4.0 | x64 | `v1.4.0` | 2023-06-25 |
|
||||
| macOS 13.4.1 | ARM | `v1.4.0` | 2023-06-29 |
|
||||
| Windows 10 | x64 | `v1.4.1` | 2023-07-30 |
|
||||
| Linux (HoloOS) | x64 | `v1.4.1` | 2023-07-30 |
|
||||
|
||||
|
@ -199,12 +199,27 @@ This demo was tested in the following environments:
|
||||
| Windows 10 | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
|
||||
| Windows 11 | ARM | `v4.13.0` | `v3.11.0` | 2023-09-21 |
|
||||
| Linux (HoloOS) | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
|
||||
| Linux (Debian) | ARM | `v4.13.0` | `v3.11.0` | 2023-09-25 |
|
||||
|
||||
:::
|
||||
|
||||
The app core state will be the HTML table. Reading files will add the table to
|
||||
the window. Writing files will parse the table into a spreadsheet.
|
||||
|
||||
<details><summary><b>Installation Notes</b> (click to show)</summary>
|
||||
|
||||
NeutralinoJS uses `portable-file-dialogs`[^12] to show open and save dialogs. On
|
||||
Linux, Zenity or KDialog are require.
|
||||
|
||||
The last Debian test was run on a system using LXDE. KDialog is supported but
|
||||
must be explicitly installed:
|
||||
|
||||
```bash
|
||||
sudo apt-get install kdialog
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
1) Create a new NeutralinoJS app:
|
||||
|
||||
```bash
|
||||
@ -383,3 +398,5 @@ Platform-specific programs will be created in the `dist` folder.
|
||||
[^9]: See ["Supported Output Formats"](/docs/api/write-options#supported-output-formats)
|
||||
[^10]: See [`filesystem.writeBinaryFile`](https://neutralino.js.org/docs/api/filesystem/#filesystemwritebinaryfilefilename-data) in the NeutralinoJS documentation
|
||||
[^11]: See ["HTML Table Input" in "Utility Functions"](/docs/api/utilities/html#html-table-input)
|
||||
[^12]: See [the list of supported `portable-file-dialogs`]
|
||||
(https://github.com/samhocevar/portable-file-dialogs#status)
|
@ -43,27 +43,32 @@ This demo was tested in the following deployments:
|
||||
| Architecture | Version | Node Target | Date |
|
||||
|:-------------|:--------|:------------|:-----------|
|
||||
| `darwin-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
|
||||
| `darwin-arm` | `5.8.1` | `18.5.0` | 2023-06-05 |
|
||||
| `darwin-arm` | `5.8.1` | `18.5.0` | 2023-09-25 |
|
||||
| `win10-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
|
||||
| `win11-arm` | `5.8.1` | `18.5.0` | 2023-09-25 |
|
||||
| `linux-x64` | `5.8.1` | `18.5.0` | 2023-05-08 |
|
||||
| `linux-arm` | `5.8.1` | `18.5.0` | 2023-09-25 |
|
||||
|
||||
**`nexe`**
|
||||
|
||||
| Architecture | Version | Node Target | Date |
|
||||
|:-------------|:-------------|:------------|:-----------|
|
||||
| `darwin-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
|
||||
| `darwin-arm` | `4.0.0-rc.2` | `18.16.0` | 2023-06-05 |
|
||||
| `darwin-arm` | `4.0.0-rc.2` | `20.7.0` | 2023-09-25 |
|
||||
| `win10-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
|
||||
| `win11-arm` | `4.0.0-rc.2` | `18.17.1` | 2023-09-25 |
|
||||
| `linux-x64` | `4.0.0-rc.2` | `14.15.3` | 2023-05-08 |
|
||||
| `linux-arm` | `4.0.0-rc.2` | `20.7.0` | 2023-09-25 |
|
||||
|
||||
**`boxednode`**
|
||||
|
||||
| Architecture | Version | Node Target | Date |
|
||||
|:-------------|:--------|:------------|:-----------|
|
||||
| `darwin-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
|
||||
| `darwin-arm` | `2.0.1` | `20.2.0` | 2023-06-05 |
|
||||
| `darwin-arm` | `2.1.1` | `20.7.0` | 2023-09-25 |
|
||||
| `win10-x64` | `2.1.1` | `16.20.2` | 2023-08-27 |
|
||||
| `linux-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
|
||||
| `linux-arm` | `2.1.1` | `20.7.0` | 2023-09-25 |
|
||||
|
||||
</details>
|
||||
|
||||
@ -114,13 +119,19 @@ This generates `xlsx-cli` or `xlsx-cli.exe` depending on platform.
|
||||
|
||||
:::caution pass
|
||||
|
||||
When the demo was tested on `darwin-arm`, the `mac-arm64` pre-built package was
|
||||
When the demo was tested on ARM targets, the Nexe pre-built packages were
|
||||
missing. The package must be built from source:
|
||||
|
||||
```bash
|
||||
npx nexe xlsx-cli.js --build --python=$(which python3) --make="-j8"
|
||||
```
|
||||
|
||||
On Windows ARM, the target `windows-arm64-18.17.1` must be specified:
|
||||
|
||||
```bash
|
||||
npx nexe xlsx-cli.js --build --python=$(which python3) --make="-j8" --target=windows-arm64-18.17.1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
@ -222,10 +233,10 @@ This demo was last tested in the following deployments:
|
||||
|:-------------|:-------------|:---------|:-----------|
|
||||
| `darwin-x64` | `11.4.183.2` | `0.71.2` | 2023-05-22 |
|
||||
| `darwin-arm` | `11.4.183.2` | `0.71.2` | 2023-05-22 |
|
||||
| `linux-x64` | `11.4.183.2` | `0.71.2` | 2023-05-23 |
|
||||
| `linux-arm` | `11.7.439.6` | `0.75.1` | 2023-08-30 |
|
||||
| `win10-x64` | `11.4.183.2` | `0.71.2` | 2023-05-23 |
|
||||
| `win11-x64` | `11.7.439.6` | `0.75.1` | 2023-08-31 |
|
||||
| `linux-x64` | `11.4.183.2` | `0.71.2` | 2023-05-23 |
|
||||
| `linux-arm` | `11.7.439.6` | `0.75.1` | 2023-08-30 |
|
||||
|
||||
:::caution pass
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
---
|
||||
title: GitHub
|
||||
title: Data Processing in GitHub
|
||||
sidebar_label: GitHub
|
||||
pagination_prev: demos/local/index
|
||||
pagination_next: demos/extensions/index
|
||||
---
|
||||
@ -10,12 +11,29 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
Many official data releases by governments and organizations include XLSX or
|
||||
XLS files. Unfortunately some data sources do not retain older versions.
|
||||
|
||||
Git is a popular system for organizing a historical record of source code and
|
||||
changes. Git can also store and track binary data artifacts.
|
||||
[Git](https://git-scm.com/) is a popular system for organizing a historical
|
||||
record of text files and changes. Git can also store and track spreadsheets.
|
||||
|
||||
GitHub is a popular host for Git repositories. GitHub's "Flat Data" project
|
||||
explores storing and comparing versions of structured CSV and JSON data. The
|
||||
official "Excel to CSV"[^1] example uses SheetJS to generate CSV data from files:
|
||||
[GitHub](https://github.com/) hosts Git repositories and provides infrastructure
|
||||
to run scheduled tasks. ["Flat Data"](https://octo.github.com/projects/flat-data)
|
||||
explores storing and comparing versions of structured CSV and JSON data.
|
||||
|
||||
[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
|
||||
data from spreadsheets.
|
||||
|
||||
This demo uses SheetJS in GitHub to process spreadsheet. We'll explore how to
|
||||
fetch and process spreadsheets at regular intervals, and how to keep track of
|
||||
changes over time.
|
||||
|
||||
:::info pass
|
||||
|
||||
["Excel to CSV"](https://octo.github.com/projects/flat-data#:~:text=Excel) is an
|
||||
official example that pulls XLSX workbooks from an endpoint and uses SheetJS to
|
||||
parse the workbooks and generate CSV files:
|
||||
|
||||
:::
|
||||
|
||||
The following diagram depicts the data dance:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
@ -36,17 +54,15 @@ sequenceDiagram
|
||||
end
|
||||
```
|
||||
|
||||
This demo covers implementation details elided in the official write-up.
|
||||
|
||||
## Flat Data
|
||||
|
||||
As a project from the company, the entire lifecycle uses GitHub offerings:
|
||||
|
||||
- GitHub offers free hosting for Git repositories
|
||||
- GitHub Actions provide the main engine for running tasks at regular intervals
|
||||
- `githubocto/flat` Action to help fetch data and automate post-processing
|
||||
- `flat-postprocessing` Post-processing helper functions and examples
|
||||
- "Flat Viewer": Web viewer for structured CSV and JSON data on GitHub
|
||||
- GitHub Actions[^1] infrastructure runs tasks at regular intervals
|
||||
- `githubocto/flat`[^2] Action to help fetch data and automate post-processing
|
||||
- `flat-postprocessing`[^3] Post-processing helper functions and examples
|
||||
- "Flat Viewer"[^4]: Web viewer for structured CSV and JSON data on GitHub
|
||||
|
||||
:::caution pass
|
||||
|
||||
@ -118,14 +134,22 @@ import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'
|
||||
</CodeBlock>
|
||||
|
||||
|
||||
The official Deno registry is out of date. This is a known registry bug.
|
||||
See [the "Deno" installation section](/docs/getting-started/installation/deno)
|
||||
for more details.
|
||||
|
||||
:::
|
||||
|
||||
#### Post-Process Script
|
||||
|
||||
The first argument to the post-processing script is the filename. The file can
|
||||
be read with `XLSX.readFile` directly. `XLSX.utils.sheet_to_csv` generates CSV:
|
||||
The first argument to the post-processing script is the filename.
|
||||
|
||||
The SheetJS `readFile` method[^5] will read the file and generate a SheetJS
|
||||
workbook object[^6]. After extracting the first worksheet, `sheet_to_csv`[^7]
|
||||
generates a CSV string.
|
||||
|
||||
After generating a CSV string, the string should be written to the filesystem
|
||||
using `Deno.writeFileSync`[^8]. By convention, the CSV should preserve the file
|
||||
name stem and replace the extension with `.csv`:
|
||||
|
||||
<CodeBlock title="postprocess.ts" language="ts">{`\
|
||||
// @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts"
|
||||
@ -157,10 +181,20 @@ Deno.writeFileSync(out_file, new TextEncoder().encode(csv));`}
|
||||
|
||||
:::note
|
||||
|
||||
This was last tested on 2023 April 06 using the GitHub UI.
|
||||
This was last tested by SheetJS users on 2023 September 24 using the GitHub UI.
|
||||
|
||||
:::
|
||||
|
||||
:::info pass
|
||||
|
||||
<https://github.com/SheetJS/flat-sheet> is an example from a previous test. The
|
||||
Flat Viewer URL for the repo is <https://flatgithub.com/SheetJS/flat-sheet/>
|
||||
|
||||
|
||||
:::
|
||||
|
||||
### Create Project
|
||||
|
||||
0) Create a free GitHub account or sign into the GitHub web interface.
|
||||
|
||||
1) Create a new repository (click the "+" icon in the upper-right corner).
|
||||
@ -172,6 +206,8 @@ This was last tested on 2023 April 06 using the GitHub UI.
|
||||
|
||||
You will be redirected to the new project.
|
||||
|
||||
### Add Code
|
||||
|
||||
2) In the browser URL bar, change "github.com" to "github.dev". For example, if
|
||||
the URL was originally `https://github.com/SheetJS/flat-sheet` , the new URL
|
||||
should be `https://github.dev/SheetJS/flat-sheet` . Press Enter.
|
||||
@ -244,6 +280,8 @@ jobs:
|
||||
|
||||
6) Click the `☰` icon and click "Go to Repository" to return to the repo page.
|
||||
|
||||
### Test Action
|
||||
|
||||
7) Click "Settings" to see the repository settings. In the left column, click
|
||||
"Actions" to expand the submenu and click "General".
|
||||
|
||||
@ -262,16 +300,28 @@ jobs:
|
||||
9) Click "Code" to return to the main view. It should have a file listing that
|
||||
includes `data.xlsx` (downloaded file) and `data.csv` (generated data)
|
||||
|
||||
Now repeat step 7 to run the action a second time. Click "Code" again.
|
||||
10) Repeat step 8 to run the action a second time. Click "Code" again.
|
||||
|
||||
10) Go to the URL bar and change "github.com" to "flatgithub.com". For example,
|
||||
### Viewer
|
||||
|
||||
11) Go to the URL bar and change "github.com" to "flatgithub.com". For example,
|
||||
if the URL was originally `https://github.com/SheetJS/flat-sheet` , the new
|
||||
URL should be `https://flatgithub.com/SheetJS/flat-sheet` . Press Enter.
|
||||
|
||||
You will see the "Flat Viewer". In the top bar, the "Commit" option allows
|
||||
for switching to an older version of the data.
|
||||
|
||||
The update process will run once an hour. If you return in a few hours and
|
||||
refresh the page, there should be more commits in the selection list.
|
||||
The following screenshot shows the viewer in action:
|
||||
|
||||
[^1]: See ["Excel to CSV"](https://githubnext.com/projects/flat-data#:~:text=View%20code-,Excel,-to%20CSV) in the "Flat Data" writeup
|
||||
![Flat Viewer for SheetJS/flat-sheet](pathname:///github/viewer.png)
|
||||
|
||||
The column chart in the Index column is a histogram.
|
||||
|
||||
[^1]: See ["GitHub Actions documentation"](https://docs.github.com/en/actions)
|
||||
[^2]: See [`githubocto/flat`](https://github.com/githubocto/flat) repo on GitHub.
|
||||
[^3]: See [`githubocto/flat-postprocessing`](https://github.com/githubocto/flat-postprocessing) repo on GitHub.
|
||||
[^4]: The hosted version is available at <https://flatgithub.com/>
|
||||
[^5]: See [`readFile` in "Reading Files"](/docs/api/parse-options)
|
||||
[^6]: See ["Workbook Object"](/docs/csf/book)
|
||||
[^7]: See [`sheet_to_csv` in "CSV and Text"](/docs/api/utilities/csv#delimiter-separated-output)
|
||||
[^8]: See [`Deno.writeFileSync`](https://deno.land/api?s=Deno.writeFileSync) in the Deno Runtime APIs documentation.
|
@ -1,5 +1,7 @@
|
||||
---
|
||||
title: Photoshop and InDesign
|
||||
title: Sheets in Photoshop and InDesign
|
||||
sidebar_label: Photoshop and InDesign
|
||||
description: Design documents using InDesign and Photoshop. Leverage spreadsheet data in app extensions using SheetJS. Use your Excel spreadsheets without leaving your Adobe apps.
|
||||
pagination_prev: demos/cloud/index
|
||||
pagination_next: demos/bigdata/index
|
||||
---
|
||||
@ -9,21 +11,27 @@ import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
Photoshop, InDesign and other Adobe Creative Suite applications offer extension
|
||||
support. Over the years there have been a few different JavaScript platforms:
|
||||
Adobe Creative Suite[^1] applications, including the Photoshop graphics editor
|
||||
and InDesign desktop publishing software, support JavaScript-based extensions.
|
||||
|
||||
- "ExtendScript": This uses an old JavaScript dialect but is supported in older
|
||||
versions of Creative Suite and Creative Cloud.
|
||||
[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
|
||||
data from spreadsheets.
|
||||
|
||||
- "Common Extensibility Platform" (CEP): This was introduced in Creative Suite.
|
||||
App automation uses ExtendScript, but integration logic uses modern JS.
|
||||
This demo uses SheetJS in Creative Suite extensions to import data from
|
||||
spreadsheet files and export data to spreadsheets. We'll explore how to use
|
||||
SheetJS scripts in extensions and programmatically interact with documents.
|
||||
|
||||
- "Unified Extensibility Platform" (UXP): This is the current recommendation for
|
||||
new Adobe CC extensions in supported apps (Photoshop 2021+ and InDesign 2022+)
|
||||
This demo explores three different JavaScript platforms supported in various
|
||||
versions of Photoshop and InDesign:
|
||||
|
||||
This demo intends to cover parts relevant to SheetJS. General setup as well as
|
||||
general Adobe considerations are not covered here. A basic familiarity with
|
||||
extension development is assumed.
|
||||
- ["ExtendScript"](#extendscript): The ExtendScript platform uses a nonstandard
|
||||
JavaScript dialect. It is the only option in older versions of Creative Suite.
|
||||
|
||||
- ["Common Extensibility Platform" (CEP)](#cep): This was introduced in Creative
|
||||
Suite. App automation uses ExtendScript, but integration logic uses modern JS.
|
||||
|
||||
- ["Unified Extensibility Platform" (UXP)](#uxp): This platform supports modern
|
||||
JavaScript but has limited support (Photoshop 2021+ and InDesign 2022+)
|
||||
|
||||
:::note
|
||||
|
||||
@ -31,10 +39,10 @@ This demo was verified in the following deployments:
|
||||
|
||||
| App | Platform | Date |
|
||||
|:----------|:-------------|:-----------|
|
||||
| Photoshop | ExtendScript | 2023-04-15 |
|
||||
| InDesign | ExtendScript | 2023-04-15 |
|
||||
| InDesign | CEP | 2023-04-30 |
|
||||
| InDesign | UXP | 2023-05-02 |
|
||||
| Photoshop | ExtendScript | 2023-09-24 |
|
||||
| InDesign | ExtendScript | 2023-09-24 |
|
||||
| InDesign | CEP | 2023-09-24 |
|
||||
| InDesign | UXP | 2023-09-24 |
|
||||
|
||||
:::
|
||||
|
||||
@ -49,13 +57,13 @@ be included from a script in the same directory:
|
||||
|
||||
### Reading Files
|
||||
|
||||
`XLSX.readFile` can directly accept an absolute URI:
|
||||
The SheetJS `readFile`[^2] method can directly accept an absolute URI:
|
||||
|
||||
```js
|
||||
var workbook = XLSX.readFile("~/Documents/test.xlsx");
|
||||
```
|
||||
|
||||
The path can be user-configurable using `File.openDialog`:
|
||||
`File.openDialog` shows a file picker and returns a path:
|
||||
|
||||
```js
|
||||
/* Show File Picker */
|
||||
@ -77,15 +85,13 @@ author (`activeDocument.info.author`) will be changed accordingly.
|
||||
|
||||
0) Download the [test workbook](pathname:///files/SheetJS.xlsb).
|
||||
|
||||
1) Download the following scripts:
|
||||
1) Download the following scripts and move to the scripts directory[^3]:
|
||||
|
||||
<ul>
|
||||
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js`}><code>xlsx.extendscript.js</code></a></li>
|
||||
<li><a href={`https://docs.sheetjs.com/extendscript/parse.jsx`}><code>parse.jsx</code></a></li>
|
||||
</ul>
|
||||
|
||||
and place in the scripts directory.
|
||||
|
||||
2) Restart Photoshop and open a file (or create a new one)
|
||||
|
||||
3) File > Scripts > parse and select the test workbook
|
||||
@ -108,19 +114,15 @@ the Layers window is "Title") will be set to the name of the first worksheet.
|
||||
- The data from the first sheet will be added to the "Table Frame" TextFrame.
|
||||
|
||||
0) Download the [test workbook](https://sheetjs.com/pres.xlsx) and
|
||||
[InDesign template](pathname:///extendscript/Template.indd)
|
||||
[InDesign template](pathname:///extendscript/Template.idml)
|
||||
|
||||
1) Download the following scripts:
|
||||
1) Download the following scripts and move to the scripts directory[^4]:
|
||||
|
||||
<ul>
|
||||
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js`}><code>xlsx.extendscript.js</code></a></li>
|
||||
<li><a href={`https://docs.sheetjs.com/extendscript/esidparse.jsx`}><code>esidparse.jsx</code></a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
Move to the scripts directory. To find the directory, activate Scripts panel
|
||||
(Windows > Utilities > Scripts), click `☰`, and select "Reveal in Explorer".
|
||||
|
||||
2) Open the template
|
||||
|
||||
3) Activate the Scripts panel. Expand the "User" folder and double-click
|
||||
@ -137,13 +139,13 @@ A new table will be added and the title will be the name of the first worksheet.
|
||||
|
||||
### Writing Files
|
||||
|
||||
`XLSX.writeFile` can directly accept an absolute URI:
|
||||
The SheetJS `writeFile`[^5] method can directly accept an absolute URI:
|
||||
|
||||
```js
|
||||
XLSX.writeFile(workbook, "~/Documents/test.xlsx");
|
||||
```
|
||||
|
||||
The path can be user-configurable using `File.saveDialog`:
|
||||
`File.saveDialog` shows a save picker and returns a path:
|
||||
|
||||
```js
|
||||
/* Show File Picker */
|
||||
@ -164,15 +166,13 @@ selected, the library will create a new workbook with one worksheet. Cell `A1`
|
||||
will be "Author" and cell `B1` will be the active Photoshop document Author.
|
||||
The PS author is available as `activeDocument.info.author`.
|
||||
|
||||
1) Download the following scripts:
|
||||
1) Download the following scripts and move to the scripts directory[^6]:
|
||||
|
||||
<ul>
|
||||
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js`}><code>xlsx.extendscript.js</code></a></li>
|
||||
<li><a href={`https://docs.sheetjs.com/extendscript/write.jsx`}><code>write.jsx</code></a></li>
|
||||
</ul>
|
||||
|
||||
and place in the scripts directory.
|
||||
|
||||
2) Restart Photoshop and open a file (or create a new one)
|
||||
|
||||
3) File > File Info ... and confirm there is an Author. If not, set to `SheetJS`
|
||||
@ -193,18 +193,15 @@ In this example, the script will show a dialog to select an output file. Once
|
||||
selected, the library will scan all text frames for table objects. Each table
|
||||
object will be scanned and a new worksheet will be created.
|
||||
|
||||
0) Download the [InDesign document](pathname:///extendscript/Filled.indd)
|
||||
0) Download the [InDesign document](pathname:///extendscript/Filled.idml)
|
||||
|
||||
1) Download the following scripts:
|
||||
1) Download the following scripts and move to the scripts directory[^7]:
|
||||
|
||||
<ul>
|
||||
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js`}><code>xlsx.extendscript.js</code></a></li>
|
||||
<li><a href={`https://docs.sheetjs.com/extendscript/esidwrite.jsx`}><code>esidwrite.jsx</code></a></li>
|
||||
</ul>
|
||||
|
||||
Move to the scripts directory. To find the directory, activate Scripts panel
|
||||
(Windows > Utilities > Scripts), click `☰`, and select "Reveal in Explorer".
|
||||
|
||||
2) Open the document.
|
||||
|
||||
3) Activate the Scripts panel. Expand the "User" folder and double-click
|
||||
@ -221,9 +218,9 @@ and compare to the InDesign doc.
|
||||
|
||||
## CEP
|
||||
|
||||
[The standalone scripts](/docs/getting-started/installation/standalone) can be
|
||||
added to CEP extension HTML. It should be downloaded from the CDN and included
|
||||
in the extension.
|
||||
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
|
||||
can be added to CEP extension HTML. It should be downloaded from the CDN and
|
||||
included in the extension.
|
||||
|
||||
For performing file operations in CEP extensions, NodeJS is not required! The
|
||||
manifest must include the following flags to enable `cep.fs`:
|
||||
@ -235,10 +232,14 @@ manifest must include the following flags to enable `cep.fs`:
|
||||
</CEFCommandLine>
|
||||
```
|
||||
|
||||
The Base64 encoding is compatible with `type: "base64"`.
|
||||
|
||||
### Reading Files
|
||||
|
||||
The second argument to `cep.fs.readFile` is an encoding. `cep.encoding.Base64`
|
||||
instructs the method to return a Base64-encoded string.
|
||||
|
||||
The SheetJS `read` method[^8], with the option `type: "base64"`[^9], can parse
|
||||
Base64 strings and return SheetJS workbook objects.
|
||||
|
||||
The typical flow is to read data from CEP and pass the data into the host
|
||||
ExtendScript context. The following snippet parses a workbook:
|
||||
|
||||
@ -259,10 +260,7 @@ const wb = XLSX.read(data.data, { type: "base64" });
|
||||
0) Download [`com.sheetjs.data.zip`](pathname:///extendscript/com.sheetjs.data.zip)
|
||||
and extract to a `com.sheetjs.data` subdirectory.
|
||||
|
||||
1) Move the entire `com.sheetjs.data` folder to the CEP extensions folder:
|
||||
|
||||
- Windows `C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\`
|
||||
- Macintosh `/Library/Application\ Support/Adobe/CEP/extensions`
|
||||
1) Move the entire `com.sheetjs.data` folder to the CEP extensions folder[^10].
|
||||
|
||||
If prompted, give administrator privileges.
|
||||
|
||||
@ -284,9 +282,15 @@ After "success" popup, the first worksheet should be written to the file.
|
||||
|
||||
### Writing Files
|
||||
|
||||
The SheetJS `write` method[^11], with the option `type: "base64"`[^12], can
|
||||
generate spreadsheet files encoded as Base64 strings.
|
||||
|
||||
The third argument to `cep.fs.writeFile` is an encoding. `cep.encoding.Base64`
|
||||
instructs the method to interpret the data as a Base64-encoded string.
|
||||
|
||||
The typical flow is to invoke a function with `CSInterface#evalScript` that
|
||||
returns data from the host ExtendScript context. The callback should build the
|
||||
workbook and initiate a file save. The following snippet saves a workbook:
|
||||
workbook and initiate a file save. The following snippet exports to XLSX:
|
||||
|
||||
```js
|
||||
/* generate XLSX as base64 string */
|
||||
@ -305,10 +309,7 @@ cep.fs.writeFile(fn.data, b64, cep.encoding.Base64);
|
||||
0) Download [`com.sheetjs.data.zip`](pathname:///extendscript/com.sheetjs.data.zip)
|
||||
and extract to a `com.sheetjs.data` subdirectory.
|
||||
|
||||
1) Move the entire `com.sheetjs.data` folder to the CEP extensions folder:
|
||||
|
||||
- Windows `C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\`
|
||||
- Macintosh `/Library/Application\ Support/Adobe/CEP/extensions`
|
||||
1) Move the entire `com.sheetjs.data` folder to the CEP extensions folder[^13]:
|
||||
|
||||
If prompted, give administrator privileges.
|
||||
|
||||
@ -329,11 +330,11 @@ If prompted, give administrator privileges.
|
||||
|
||||
UXP uses scripts with `.psjs` (PS) or `.idjs` (InDesign) file extensions.
|
||||
|
||||
[The "Standalone" scripts](/docs/getting-started/installation/frameworks) can
|
||||
be loaded directly in UXP scripts with `require`:
|
||||
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
|
||||
can be loaded directly in UXP scripts with `require`:
|
||||
|
||||
```js
|
||||
// assuming xlsx.full.min.js is in the same folder as the idjs / psjs script
|
||||
/* assuming xlsx.full.min.js is in the same folder as the idjs / psjs script */
|
||||
const XLSX = require("./xlsx.full.min.js");
|
||||
```
|
||||
|
||||
@ -347,7 +348,8 @@ const storage = UXP.storage, ufs = storage.localFileSystem;
|
||||
### Reading Files
|
||||
|
||||
The `getFileForOpening` method resolves to a `File` object. Reading the file
|
||||
with the `binary` format returns an `ArrayBuffer` object that can be parsed:
|
||||
with the `binary` format returns an `ArrayBuffer` object that can be parsed
|
||||
with the SheetJS `read` method[^14]:
|
||||
|
||||
```js
|
||||
/* show file picker (single file, no folders) */
|
||||
@ -363,11 +365,7 @@ const wb = XLSX.read(ab);
|
||||
<Tabs groupId="ccapp">
|
||||
<TabItem value="indesign" label="InDesign">
|
||||
|
||||
0) Open the "Scripts Panel" folder.
|
||||
|
||||
To find this folder: Open the Scripts panel in InDesign (Window > Utilities >
|
||||
Scripts). In the Scripts panel, right-click "User" and select "Reveal". This
|
||||
will open a Finder (macOS) or Explorer (Windows) window. Open "Scripts Panel"
|
||||
0) Open the "Scripts Panel" folder[^15].
|
||||
|
||||
1) Download the following scripts:
|
||||
|
||||
@ -385,6 +383,16 @@ Move them to the Scripts Panel folder.
|
||||
4) In the Scripts Panel, double-click "parse". Select the downloaded `pres.xlsx`
|
||||
in the file picker.
|
||||
|
||||
:::caution pass
|
||||
|
||||
If the InDesign version does not support UXP, a tooltip shows a message:
|
||||
|
||||
> This file is not executable by any supported script language.
|
||||
|
||||
It is strongly recommended to upgrade to InDesign 2023.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
@ -392,9 +400,14 @@ in the file picker.
|
||||
|
||||
### Writing Files
|
||||
|
||||
The `getFileForSaving` method resolves to a `File` object. The workbook should
|
||||
be written with `type: "buffer"` for compatibility with the `binary` format:
|
||||
The SheetJS `write` method[^16], with the option `type: "buffer"`[^17], returns
|
||||
file data stored in a `Uint8Array`.
|
||||
|
||||
The `getFileForSaving` method resolves to a `File` object. The `write` method
|
||||
accepts an options argument. If the `data: storage.formats.binary` option is
|
||||
set, the method will correctly interpret `Uint8Array` data.
|
||||
|
||||
The following snippet exports to XLSX:
|
||||
|
||||
```js
|
||||
/* generate XLSX with type: "buffer" */
|
||||
@ -410,11 +423,7 @@ await file.write(buf, { data: storage.formats.binary });
|
||||
<Tabs groupId="ccapp">
|
||||
<TabItem value="indesign" label="InDesign">
|
||||
|
||||
0) Open the "Scripts Panel" folder.
|
||||
|
||||
To find this folder: Open the Scripts panel in InDesign (Window > Utilities >
|
||||
Scripts). In the Scripts panel, right-click "User" and select "Reveal". This
|
||||
will open a Finder (macOS) or Explorer (Windows) window. Open "Scripts Panel"
|
||||
0) Open the "Scripts Panel" folder[^18].
|
||||
|
||||
1) Download the following scripts:
|
||||
|
||||
@ -435,3 +444,55 @@ Move them to the Scripts Panel folder.
|
||||
</Tabs>
|
||||
|
||||
</details>
|
||||
|
||||
## Miscellany
|
||||
|
||||
### Scripts Panel
|
||||
|
||||
The scripts panel folder is used for ExtendScript and UXP scripts. The location
|
||||
can be revealed from the relevant applications. For InDesign:
|
||||
|
||||
1) Activate Scripts panel (Windows > Utilities > Scripts)
|
||||
|
||||
2) In the new panel window, select the User folder
|
||||
|
||||
3) Click `☰` and select "Reveal in Explorer" or "Reveal in Finder".
|
||||
|
||||
A new Explorer (Windows) or Finder (macOS) window will open the folder.
|
||||
|
||||
:::info pass
|
||||
|
||||
Some versions of InDesign will open the parent "Scripts" folder. If there is a
|
||||
"Scripts Panel" subdirectory, that folder should be used.
|
||||
|
||||
:::
|
||||
|
||||
### CEP Extensions
|
||||
|
||||
CEP extension scripts are typically stored in a system-wide folder:
|
||||
|
||||
| OS | Folder |
|
||||
|:----------|:------------------------------------------------------------|
|
||||
| Windows | `C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\` |
|
||||
| Macintosh | `/Library/Application\ Support/Adobe/CEP/extensions` |
|
||||
|
||||
Administrator privileges are usually required for writing to the folder.
|
||||
|
||||
[^1]: Historically, Adobe applications were separate entities. Eventually they were bundled in a package called "Creative Suite". It was rebranded to "Creative Cloud" later. As ExtendScript was introduced during the Creative Suite era, this page will use the phrase "Creative Suite".
|
||||
[^2]: See [`readFile` in "Reading Files"](/docs/api/parse-options)
|
||||
[^3]: See ["Scripts Panel"](#scripts-panel)
|
||||
[^4]: See ["Scripts Panel"](#scripts-panel)
|
||||
[^5]: See [`writeFile` in "Writing Files"](/docs/api/write-options)
|
||||
[^6]: See ["Scripts Panel"](#scripts-panel)
|
||||
[^7]: See ["Scripts Panel"](#scripts-panel)
|
||||
[^8]: See [`read` in "Reading Files"](/docs/api/parse-options)
|
||||
[^9]: See [the "base64" type in "Reading Files"](/docs/api/parse-options#input-type)
|
||||
[^10]: See ["CEP Extensions"](#cep-extensions)
|
||||
[^11]: See [`write` in "Writing Files"](/docs/api/write-options)
|
||||
[^12]: See ["Supported Output Formats" type in "Writing Files"](/docs/api/write-options#supported-output-formats)
|
||||
[^13]: See ["CEP Extensions"](#cep-extensions)
|
||||
[^14]: See [`read` in "Reading Files"](/docs/api/parse-options)
|
||||
[^15]: See ["Scripts Panel"](#scripts-panel)
|
||||
[^16]: See [`write` in "Writing Files"](/docs/api/write-options)
|
||||
[^17]: See ["Supported Output Formats" type in "Writing Files"](/docs/api/write-options#supported-output-formats)
|
||||
[^18]: See ["Scripts Panel"](#scripts-panel)
|
@ -119,9 +119,9 @@ This demo was tested in the following deployments:
|
||||
|:-------------|:--------|:-----------|
|
||||
| `darwin-x64` | `2.7.0` | 2023-07-24 |
|
||||
| `darwin-arm` | `2.7.0` | 2023-06-05 |
|
||||
| `win10-x64` | `2.7.0` | 2023-07-24 |
|
||||
| `linux-x64` | `2.7.0` | 2023-09-22 |
|
||||
| `linux-arm` | `2.7.0` | 2023-08-30 |
|
||||
| `win10-x64` | `2.7.0` | 2023-07-24 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -723,9 +723,9 @@ This demo was last tested in the following deployments:
|
||||
|:-------------|:---------|:-----------|
|
||||
| `darwin-x64` | `0.75.1` | 2023-08-26 |
|
||||
| `darwin-arm` | `0.73.0` | 2023-06-05 |
|
||||
| `win10-x64` | `0.71.2` | 2023-05-23 |
|
||||
| `linux-x64` | `0.71.2` | 2023-05-23 |
|
||||
| `linux-arm` | `0.75.1` | 2023-08-30 |
|
||||
| `win10-x64` | `0.71.2` | 2023-05-23 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -97,6 +97,7 @@ This demo was tested in the following deployments:
|
||||
| `darwin-x64` | `28ee0ee` | `1.19.3` | 2023-06-05 |
|
||||
| `darwin-arm` | `28ee0ee` | `1.20.4` | 2023-06-05 |
|
||||
| `win10-x64` | `81d7606` | `1.20.2` | 2023-08-27 |
|
||||
| `win10-arm` | `fc55792` | `1.21.1` | 2023-09-25 |
|
||||
| `linux-x64` | `81d7606` | `1.21.0` | 2023-08-27 |
|
||||
| `linux-arm` | `3dbe69d` | `1.21.1` | 2023-08-30 |
|
||||
|
||||
|
@ -264,14 +264,22 @@ This demo was tested in the following deployments:
|
||||
|:-------------|:-----------|:-----------|
|
||||
| `darwin-x64` | `2788d71` | 2023-07-24 |
|
||||
| `darwin-arm` | `2788d71` | 2023-06-05 |
|
||||
| `win10-x64` | `2788d71` | 2023-07-24 |
|
||||
| `win11-arm` | `2788d71` | 2023-09-25 |
|
||||
| `linux-x64` | `2788d71` | 2023-06-02 |
|
||||
| `linux-arm` | `2788d71` | 2023-08-29 |
|
||||
| `win10-x64` | `2788d71` | 2023-07-24 |
|
||||
|
||||
When the demo was tested, commit `2788d71` corresponded to the latest release.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
QuickJS does not officially support Windows. The `win10-x64` and `win11-arm`
|
||||
tests were run entirely within Windows Subsystem for Linux.
|
||||
|
||||
:::
|
||||
|
||||
0) Build `libquickjs.a`:
|
||||
|
||||
```bash
|
||||
|
@ -21,7 +21,8 @@ The main library can be loaded and compiled in a new context:
|
||||
```rb
|
||||
require "execjs"
|
||||
|
||||
source = File.open("xlsx.full.min.js").read;
|
||||
source = File.open("xlsx.full.min.js", "rb").read;
|
||||
source.force_encoding("UTF-8");
|
||||
context = ExecJS.compile(source);
|
||||
```
|
||||
|
||||
@ -42,7 +43,7 @@ and writes to `sheetjsw.xlsb`:
|
||||
require "base64"
|
||||
|
||||
# read and encode data to Base64
|
||||
data = Base64.strict_encode64(File.open("pres.numbers").read);
|
||||
data = Base64.strict_encode64(File.open("pres.numbers", "rb").read);
|
||||
|
||||
# define function and call with the data
|
||||
xlsb = context.call(<<EOF, data);
|
||||
@ -69,9 +70,14 @@ This demo was tested in the following deployments:
|
||||
|
||||
| Platform | Ruby | ExecJS | Date |
|
||||
|:-------------|:---------|:--------|:-----------|
|
||||
| `darwin-x64` | `2.7.6` | `2.8.1` | 2023-07-24 |
|
||||
| `darwin-arm` | `2.6.10` | `2.8.1` | 2023-07-24 |
|
||||
| `linux-x64` | `3.0.4` | `2.8.1` | 2023-08-27 |
|
||||
| `darwin-x64` | `2.7.6` | `2.9.1` | 2023-09-24 |
|
||||
| `darwin-arm` | `2.7.4` | `2.9.1` | 2023-09-24 |
|
||||
| `win10-x64` | `3.2.2` | `2.9.1` | 2023-09-24 |
|
||||
| `win11-arm` | `3.0.2` | `2.9.1` | 2023-09-24 |
|
||||
| `linux-x64` | `3.0.4` | `2.9.1` | 2023-09-24 |
|
||||
| `linux-arm` | `2.7.4` | `2.9.1` | 2023-09-24 |
|
||||
|
||||
Note: The Windows 11 ARM64 test used the Ruby version that ships with WSL.
|
||||
|
||||
:::
|
||||
|
||||
@ -118,3 +124,18 @@ ruby ExecSheetJS.rb pres.numbers
|
||||
|
||||
If the program succeeded, the CSV contents will be printed to console and the
|
||||
file `sheetjsw.xlsb` will be created. That file can be opened with Excel.
|
||||
|
||||
:::caution pass
|
||||
|
||||
If a JavaScript runtime is not available, the script will throw an error:
|
||||
|
||||
```
|
||||
execjs/runtimes.rb:68:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
|
||||
```
|
||||
|
||||
ExecJS 2.9.1 supports the Bun runtime. Install the Bun runtime[^1], restart the
|
||||
terminal, and re-run the script.
|
||||
|
||||
:::
|
||||
|
||||
[^1]: `curl -fsSL https://bun.sh/install | bash` can be run from macOS, Linux, and Windows WSL.
|
@ -116,9 +116,9 @@ This demo was tested in the following deployments:
|
||||
|:-------------|:-----------|
|
||||
| `darwin-x64` | 2023-08-31 |
|
||||
| `darwin-arm` | 2023-07-05 |
|
||||
| `win10-x64` | 2023-08-31 |
|
||||
| `linux-x64` | 2023-07-05 |
|
||||
| `linux-arm` | 2023-08-30 |
|
||||
| `win10-x64` | 2023-08-31 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -3,11 +3,12 @@
|
||||
require "execjs"
|
||||
require "base64"
|
||||
|
||||
source = File.open("xlsx.full.min.js").read;
|
||||
source = File.open("xlsx.full.min.js", "rb").read();
|
||||
source.force_encoding("UTF-8");
|
||||
context = ExecJS.compile(source);
|
||||
puts context.eval("XLSX.version");
|
||||
|
||||
data = Base64.strict_encode64(File.open(ARGV[0]).read);
|
||||
data = Base64.strict_encode64(File.open(ARGV[0], "rb").read);
|
||||
result = context.call(<<EOF, data);
|
||||
function(data) {
|
||||
var wb = XLSX.read(data, {type: 'base64'});
|
||||
|
Binary file not shown.
Binary file not shown.
BIN
docz/static/github/viewer.png
Normal file
BIN
docz/static/github/viewer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 121 KiB |
Loading…
Reference in New Issue
Block a user