| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | --- | 
					
						
							| 
									
										
										
										
											2022-08-03 07:42:37 +00:00
										 |  |  | sidebar_position: 2 | 
					
						
							| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-13 22:01:26 +00:00
										 |  |  | [Installation is straightforward:](../getting-started/installation/extendscript) download a | 
					
						
							| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2022-08-14 08:10:18 +00:00
										 |  |  |    Enter `SheetJSPSTest.xlsx` and press "Save" | 
					
						
							| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 4) An alert will confirm that the file was created: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 5) Open the generated `SheetJSPSTest.xlsx` file and compare to Photoshop author | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## CEP
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-13 22:01:26 +00:00
										 |  |  | [The standalone scripts](../getting-started/installation/standalone) can be added to CEP | 
					
						
							| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | extension HTML | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## UXP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | UXP officially recommends `require` and NodeJS Modules for third party support. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-13 22:01:26 +00:00
										 |  |  | [Use the "Frameworks" instructions to download.](../getting-started/installation/frameworks) | 
					
						
							| 
									
										
										
										
											2022-05-30 05:04:05 +00:00
										 |  |  | 
 |