forked from sheetjs/docs.sheetjs.com
		
	extendscript
This commit is contained in:
		
							parent
							
								
									403a102cb8
								
							
						
					
					
						commit
						4aafcce8be
					
				
							
								
								
									
										190
									
								
								docz/docs/04-getting-started/03-demos/02-extendscript.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										190
									
								
								docz/docs/04-getting-started/03-demos/02-extendscript.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,190 @@
 | 
			
		||||
---
 | 
			
		||||
sidebar_position: 3
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Adobe Apps
 | 
			
		||||
 | 
			
		||||
import Tabs from '@theme/Tabs';
 | 
			
		||||
import TabItem from '@theme/TabItem';
 | 
			
		||||
 | 
			
		||||
Photoshop, InDesign and other Adobe Creative Suite applications offer extension
 | 
			
		||||
support.  Over the years there have been a few different JavaScript platforms:
 | 
			
		||||
 | 
			
		||||
- "ExtendScript": This uses an old JavaScript dialect but is supported in older
 | 
			
		||||
  versions of Creative Suite and Creative Cloud.
 | 
			
		||||
 | 
			
		||||
- "CEP": This was recommended in CS6 but eventually deprecated.
 | 
			
		||||
 | 
			
		||||
- "UXP": This is the current Adobe recommendation for new CC extensions.
 | 
			
		||||
 | 
			
		||||
This demo intends to cover the SheetJS-related parts.  General setup as well as
 | 
			
		||||
general Adobe considerations are not covered here.  A basic familiarity with
 | 
			
		||||
extension development is assumed.
 | 
			
		||||
 | 
			
		||||
## ExtendScript Scripts
 | 
			
		||||
 | 
			
		||||
[Installation is straightforward:](../../installation/extendscript) download a
 | 
			
		||||
script and move it to your project directory.
 | 
			
		||||
 | 
			
		||||
### Reading Files
 | 
			
		||||
 | 
			
		||||
`XLSX.readFile` can directly accept an absolute URI:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var workbook = XLSX.readFile("~/Documents/test.xlsx");
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The path can be user-configurable using `File.openDialog`:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
/* Show File Picker */
 | 
			
		||||
var thisFile = File.openDialog("Select a spreadsheet");
 | 
			
		||||
if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(thisFile.absoluteURI);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<details open><summary><b>Complete Example</b> (click to hide)</summary>
 | 
			
		||||
 | 
			
		||||
In this example, the script will show a dialog to select a file.  After reading
 | 
			
		||||
the file, the workbook Author property will be extracted and the Photoshop doc
 | 
			
		||||
author (`activeDocument.info.author`) will be changed accordingly.
 | 
			
		||||
 | 
			
		||||
This demo was verified in Photoshop CS6 64-bit on Windows 10.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
#target photoshop
 | 
			
		||||
#include "xlsx.extendscript.js";
 | 
			
		||||
 | 
			
		||||
function main_parse() {
 | 
			
		||||
  /* Show File Picker */
 | 
			
		||||
  var thisFile = File.openDialog("Select a spreadsheet");
 | 
			
		||||
  if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Read file from disk */
 | 
			
		||||
  var workbook = XLSX.readFile(thisFile.absoluteURI);
 | 
			
		||||
 | 
			
		||||
  /* Get Workbook Author */
 | 
			
		||||
  var Props = workbook.Props; if(!Props) { alert("Missing Author!"); return; }
 | 
			
		||||
  var Author = Props.Author; if(!Author) { alert("Missing Author!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Change Document Author to Workbook Author */
 | 
			
		||||
  var info = activeDocument.info;
 | 
			
		||||
  alert("Changing Author from |" + info.author + "| to |" + Author + "|");
 | 
			
		||||
  info.author = Author;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main_parse();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
0) Download the [test workbook](pathname:///files/SheetJS.xlsb).
 | 
			
		||||
 | 
			
		||||
1) Download the following scripts:
 | 
			
		||||
- [`xlsx.extendscript.js`](https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.extendscript.js)
 | 
			
		||||
- [`parse.jsx`](pathname:///live/parse.jsx)
 | 
			
		||||
 | 
			
		||||
and place in the scripts directory.  For CS6 Windows 10 the path is typically
 | 
			
		||||
 | 
			
		||||
`C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Presets\Scripts`
 | 
			
		||||
 | 
			
		||||
2) Restart Photoshop and open a file (or create a new one)
 | 
			
		||||
 | 
			
		||||
3) File > Scripts > parse and select the test workbook
 | 
			
		||||
 | 
			
		||||
4) An alert will confirm that the file was read and the author will be changed:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
5) File > File Info... should show the updated Author field!
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
### Writing Files
 | 
			
		||||
 | 
			
		||||
`XLSX.writeFile` can directly accept an absolute URI:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
XLSX.writeFile(workbook, "~/Documents/test.xlsx");
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The path can be user-configurable using `File.saveDialog`:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
/* Show File Picker */
 | 
			
		||||
var thisFile = File.saveDialog("Select an output file", "*.xlsx;*.xls");
 | 
			
		||||
if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
/* Write file to disk */
 | 
			
		||||
XLSX.writeFile(workbook, thisFile.absoluteURI);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<details open><summary><b>Complete Example</b> (click to hide)</summary>
 | 
			
		||||
 | 
			
		||||
In this example, the script will show a dialog to select an output file.  Once
 | 
			
		||||
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`.
 | 
			
		||||
 | 
			
		||||
This demo was verified in Photoshop CS6 64-bit on Windows 10.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
#target photoshop
 | 
			
		||||
#include "xlsx.extendscript.js";
 | 
			
		||||
 | 
			
		||||
function main_write() {
 | 
			
		||||
  /* Show File Picker */
 | 
			
		||||
  var thisFile = File.saveDialog("Select an output file", "*.xlsx;*.xls");
 | 
			
		||||
  if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Create new Worksheet */
 | 
			
		||||
  var ws = XLSX.utils.aoa_to_sheet([
 | 
			
		||||
    ["Author", activeDocument.info.author]
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  /* Create new Workbook and add worksheet */
 | 
			
		||||
  var wb = XLSX.utils.book_new();
 | 
			
		||||
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
 | 
			
		||||
 | 
			
		||||
  /* Write file to disk */
 | 
			
		||||
  XLSX.writeFile(wb, thisFile.absoluteURI);
 | 
			
		||||
  alert("Created File " + thisFile.absoluteURI);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main_write();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
1) Download the following scripts:
 | 
			
		||||
- [`xlsx.extendscript.js`](https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.extendscript.js)
 | 
			
		||||
- [`write.jsx`](pathname:///live/write.jsx)
 | 
			
		||||
 | 
			
		||||
and place in the scripts directory.  For CS6 Windows 10 the path is typically
 | 
			
		||||
 | 
			
		||||
`C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Presets\Scripts`
 | 
			
		||||
 | 
			
		||||
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`
 | 
			
		||||
 | 
			
		||||
4) File > Scripts > write and use the popup to select the Documents folder.
 | 
			
		||||
   Enter `SheetJSPSTest.xlsx` and hit "Save"
 | 
			
		||||
 | 
			
		||||
4) An alert will confirm that the file was created:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
5) Open the generated `SheetJSPSTest.xlsx` file and compare to Photoshop author
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
## CEP
 | 
			
		||||
 | 
			
		||||
[The standalone scripts](../../installation/standalone) can be added to CEP
 | 
			
		||||
extension HTML
 | 
			
		||||
 | 
			
		||||
## UXP
 | 
			
		||||
 | 
			
		||||
UXP officially recommends `require` and NodeJS Modules for third party support.
 | 
			
		||||
 | 
			
		||||
[Use the "Frameworks" instructions to download.](../../installation/frameworks)
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ The demo projects include small runnable examples and short explainers.
 | 
			
		||||
- [`NW.js`](https://github.com/SheetJS/SheetJS/tree/master/demos/nwjs/)
 | 
			
		||||
- [`Chrome / Chromium Extension`](https://github.com/SheetJS/SheetJS/tree/master/demos/chrome/)
 | 
			
		||||
- [`Google Sheets API`](./gsheet)
 | 
			
		||||
- [`ExtendScript for Adobe Apps`](https://github.com/SheetJS/SheetJS/tree/master/demos/extendscript/)
 | 
			
		||||
- [`ExtendScript for Adobe Apps`](./extendscript)
 | 
			
		||||
- [`Headless Browsers`](https://github.com/SheetJS/SheetJS/tree/master/demos/headless/)
 | 
			
		||||
- [`Other JavaScript Engines`](https://github.com/SheetJS/SheetJS/tree/master/demos/altjs/)
 | 
			
		||||
- [`"serverless" functions`](https://github.com/SheetJS/SheetJS/tree/master/demos/function/)
 | 
			
		||||
 | 
			
		||||
@ -338,7 +338,7 @@ request({url: url, encoding: null}, function(err, resp, body) {
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[`axios`](https://npm.im/axios) works the same way in browser and in NodeJS:
 | 
			
		||||
[`axios`](https://axios-http.com/) works the same way in browser and in NodeJS:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const XLSX = require("xlsx");
 | 
			
		||||
 | 
			
		||||
@ -296,10 +296,10 @@ data grid for previewing and modifying structured data in the web browser.  The
 | 
			
		||||
<details>
 | 
			
		||||
  <summary><b>Previewing data in a React data grid</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
[`react-data-grid`](https://npm.im/react-data-grid) is a data grid tailored for
 | 
			
		||||
react.  It expects two properties: `rows` of data objects and `columns` which
 | 
			
		||||
describe the columns.  For the purposes of massaging the data to fit the react
 | 
			
		||||
data grid API it is easiest to start from an array of arrays.
 | 
			
		||||
[`react-data-grid`](https://adazzle.github.io/react-data-grid) is a data grid
 | 
			
		||||
built for React.  It uses two properties: `rows` of data objects and `columns`
 | 
			
		||||
which describe the columns.  For the purposes of massaging the data to fit the
 | 
			
		||||
`react-data-grid` API it is easiest to start from an array of arrays.
 | 
			
		||||
 | 
			
		||||
This demo starts by fetching a remote file and using `XLSX.read` to extract:
 | 
			
		||||
 | 
			
		||||
@ -336,8 +336,9 @@ export default function App() {
 | 
			
		||||
<details>
 | 
			
		||||
  <summary><b>Previewing data in a VueJS data grid</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
[`vue3-table-lite`](https://github.com/linmasahiro/vue3-table-lite) is a simple
 | 
			
		||||
VueJS 3 data table.  It is featured [in the VueJS demo](https://github.com/SheetJS/SheetJS/tree/master/demos/vue/modify/).
 | 
			
		||||
[`vue3-table-lite`](https://linmasahiro.github.io/vue3-table-lite/dist/) is a
 | 
			
		||||
simple VueJS 3 data table.  It is featured in the
 | 
			
		||||
[VueJS demo](https://github.com/SheetJS/SheetJS/tree/master/demos/vue/modify/).
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -67,9 +67,9 @@ XLSX.write(wb, {Props:{Author:"SheetJS"}});
 | 
			
		||||
<details>
 | 
			
		||||
  <summary><b>Format Support</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
**Defined Names**: XLSX/M, XLSB, BIFF8 XLS, XLML, SYLK
 | 
			
		||||
**Simple Defined Names**: XLSX/M, XLSB, BIFF8 XLS, XLML, ODS, SYLK
 | 
			
		||||
 | 
			
		||||
**Unicode Defined Names**: XLSX/M, XLSB, BIFF8 XLS, XLML
 | 
			
		||||
**Unicode Defined Names**: XLSX/M, XLSB, BIFF8 XLS, XLML, ODS
 | 
			
		||||
 | 
			
		||||
**Defined Name Comment**: XLSX/M, XLSB, BIFF8 XLS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ hide_table_of_contents: true
 | 
			
		||||

 | 
			
		||||
[](https://github.com/SheetJS/sheetjs/actions)
 | 
			
		||||
[](https://snyk.io/test/github/SheetJS/sheetjs)
 | 
			
		||||
[](https://npmjs.org/package/xlsx)
 | 
			
		||||
[](https://cdn.sheetjs.com/)
 | 
			
		||||
 | 
			
		||||
SheetJS Community Edition offers battle-tested open-source solutions for
 | 
			
		||||
extracting useful data from almost any complex spreadsheet and generating new
 | 
			
		||||
@ -67,7 +67,7 @@ document.getElementById("sheetjsexport").addEventListener('click', function() {
 | 
			
		||||
function Table2XLSX(props) {
 | 
			
		||||
 | 
			
		||||
  /* Callback invoked when the button is clicked */
 | 
			
		||||
  const xport = React.useCallback(() => {
 | 
			
		||||
  const xport = React.useCallback(async () => {
 | 
			
		||||
      /* Create worksheet from HTML DOM TABLE */
 | 
			
		||||
      const table = document.getElementById("Table2XLSX");
 | 
			
		||||
      const wb = XLSX.utils.table_to_book(table);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								docz/static/files/SheetJS.xlsb
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/files/SheetJS.xlsb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docz/static/files/psparse.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/files/psparse.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 6.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								docz/static/files/pswrite.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/files/pswrite.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 7.0 KiB  | 
							
								
								
									
										22
									
								
								docz/static/live/parse.jsx
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										22
									
								
								docz/static/live/parse.jsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
#target photoshop
 | 
			
		||||
#include "xlsx.extendscript.js";
 | 
			
		||||
 | 
			
		||||
function main_parse() {
 | 
			
		||||
  /* Show File Picker */
 | 
			
		||||
  var thisFile = File.openDialog("Select a spreadsheet");
 | 
			
		||||
  if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Read file from disk */
 | 
			
		||||
  var workbook = XLSX.readFile(thisFile.absoluteURI);
 | 
			
		||||
 | 
			
		||||
  /* Get Workbook Author */
 | 
			
		||||
  var Props = workbook.Props; if(!Props) { alert("Missing Author!"); return; }
 | 
			
		||||
  var Author = Props.Author; if(!Author) { alert("Missing Author!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Change Document Author to Workbook Author */
 | 
			
		||||
  var info = activeDocument.info;
 | 
			
		||||
  alert("Changing Author from |" + info.author + "| to |" + Author + "|");
 | 
			
		||||
  info.author = Author;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main_parse();
 | 
			
		||||
							
								
								
									
										23
									
								
								docz/static/live/write.jsx
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										23
									
								
								docz/static/live/write.jsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
#target photoshop
 | 
			
		||||
#include "xlsx.extendscript.js";
 | 
			
		||||
 | 
			
		||||
function main_write() {
 | 
			
		||||
  /* Show File Picker */
 | 
			
		||||
  var thisFile = File.saveDialog("Select an output file", "*.xlsx;*.xls");
 | 
			
		||||
  if(!thisFile) { alert("File not found!"); return; }
 | 
			
		||||
 | 
			
		||||
  /* Create new Worksheet */
 | 
			
		||||
  var ws = XLSX.utils.aoa_to_sheet([
 | 
			
		||||
    ["Author", activeDocument.info.author]
 | 
			
		||||
  ]);
 | 
			
		||||
 | 
			
		||||
  /* Create new Workbook and add worksheet */
 | 
			
		||||
  var wb = XLSX.utils.book_new();
 | 
			
		||||
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
 | 
			
		||||
 | 
			
		||||
  /* Write file to disk */
 | 
			
		||||
  XLSX.writeFile(wb, thisFile.absoluteURI);
 | 
			
		||||
  alert("Created File " + thisFile.absoluteURI);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main_write();
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user