forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			89 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								sidebar_position: 5
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# NetSuite
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This demo discusses the key SheetJS operations.  Familiarity with SuiteScript 2
							 | 
						||
| 
								 | 
							
								is assumed.  The following sections of the SuiteScript documentation should be
							 | 
						||
| 
								 | 
							
								perused before reading this demo:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [SuiteScript 2.x API Introduction](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4387172221.html)
							 | 
						||
| 
								 | 
							
								  is an introduction that includes a simple example with deployment details,
							 | 
						||
| 
								 | 
							
								- [SuiteScript 2.x Custom Modules](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4704097697.html)
							 | 
						||
| 
								 | 
							
								  covers custom modules and adding third party scripts to modules.
							 | 
						||
| 
								 | 
							
								- [`N/file` Module](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4205693274.html)
							 | 
						||
| 
								 | 
							
								  covers the `N/file` module.  It is the main API for interacting with files.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The library plays nice with each script type, including RESTlets and Suitelets.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Loading the SheetJS Standalone Script
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[This script](https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js)
							 | 
						||
| 
								 | 
							
								plays nice with SuiteScript `define`.  It should be downloaded and uploaded to
							 | 
						||
| 
								 | 
							
								the File Cabinet.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								After uploading, create a JSON configuration file (or add the alias to an
							 | 
						||
| 
								 | 
							
								existing config file).  The reference points to the file and omits the `.js`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```json
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  "paths": {
							 | 
						||
| 
								 | 
							
								    // highlight-next-line
							 | 
						||
| 
								 | 
							
								    "xlsx": "/SuiteScripts/xlsx.full.min"
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This config file should be referenced in SuiteScripts using `@NAmdConfig`. This
							 | 
						||
| 
								 | 
							
								part is documented in ["Import a third-party JavaScript Library"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4704111062.html#bridgehead_4738199877):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* @NApiVersion 2.x
							 | 
						||
| 
								 | 
							
								// highlight-next-line
							 | 
						||
| 
								 | 
							
								* @NAmdConfig  ./JsLibraryConfig.json
							 | 
						||
| 
								 | 
							
								* ... more options ...
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								// highlight-next-line
							 | 
						||
| 
								 | 
							
								define(['N/file', 'xlsx'], function(file, XLSX) {
							 | 
						||
| 
								 | 
							
								  ...
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Reading Files
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`N/file` provides [`file.load`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4226574300.html)
							 | 
						||
| 
								 | 
							
								for pulling files:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[`File#getContents`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4229269811.html)
							 | 
						||
| 
								 | 
							
								returns the data as a Base64-encoded string which can be read with `XLSX.read`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								/* load file */
							 | 
						||
| 
								 | 
							
								var f = file.load({ id: id_of_file });
							 | 
						||
| 
								 | 
							
								/* parse */
							 | 
						||
| 
								 | 
							
								var workbook = XLSX.read(f.getContents(), {type: "base64"});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Writing Files
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`N/file` provides [`file.create`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4223861820.html)
							 | 
						||
| 
								 | 
							
								and `file.load` for creating and loading files respectively.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Binary content must be base64-encoded.  Fortunately, `XLSX.write` with `base64`
							 | 
						||
| 
								 | 
							
								type will generate compatible Base64 strings:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								/* write XLSX workbook as base64 string */
							 | 
						||
| 
								 | 
							
								var out = XLSX.write(workbook, { bookType: "xlsx", type: "base64" });
							 | 
						||
| 
								 | 
							
								/* create file */
							 | 
						||
| 
								 | 
							
								var newfile = file.create({
							 | 
						||
| 
								 | 
							
								  name: 'test.xlsx', // replace with desired name
							 | 
						||
| 
								 | 
							
								  fileType: file.Type.EXCEL,
							 | 
						||
| 
								 | 
							
								  contents: out
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								/* save */
							 | 
						||
| 
								 | 
							
								newfile.save();
							 | 
						||
| 
								 | 
							
								```
							 |