forked from sheetjs/docs.sheetjs.com
		
	mathematica
This commit is contained in:
		
							parent
							
								
									4286792300
								
							
						
					
					
						commit
						76dbfc419c
					
				
							
								
								
									
										114
									
								
								docz/docs/03-demos/10-extensions/06-mathematica.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										114
									
								
								docz/docs/03-demos/10-extensions/06-mathematica.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| --- | ||||
| title: Mathematica | ||||
| pagination_prev: demos/cloud/index | ||||
| pagination_next: demos/bigdata/index | ||||
| --- | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested in 2023 April 22 in Mathematica 13.2.1 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| [The "NodeJS" instructions](/docs/getting-started/installation/frameworks) | ||||
| describe installation steps for NodeJS projects.  Mathematica has built-in | ||||
| features for external scripting with NodeJS. Helper functions can translate | ||||
| between CSV text and Mathematica datasets or arrays. | ||||
| 
 | ||||
| Mathematica can also use [command-line tools](/docs/demos/desktop/cli) | ||||
| 
 | ||||
| ## Integration Details | ||||
| 
 | ||||
| :::caution | ||||
| 
 | ||||
| Mathematica includes `ExternalEvaluate` for running scripts in an external | ||||
| engine.  In local testing, there were incompatibilities with recent NodeJS | ||||
| versions.  This demo uses the shell integration to call a command-line tool. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ### Command-Line Tools | ||||
| 
 | ||||
| `ExternalEvaluate` can run command-line tools and capture standard output: | ||||
| 
 | ||||
| ```mathematica | ||||
| cmd = "/usr/local/bin/xlsx-cli ~/Downloads/pres.numbers" | ||||
| csvdata = ExternalEvaluate["Shell" -> "StandardOutput", cmd]; | ||||
| ``` | ||||
| 
 | ||||
| Once evaluated, `ImportString` can interpret the data as a dataset.  Typically | ||||
| the first row of the CSV output is the header row.  The `HeaderLines` option | ||||
| controls how Mathematica parses the data: | ||||
| 
 | ||||
| ```mathematica | ||||
| data = ImportString[csvdata, "Dataset", "HeaderLines" -> 1] | ||||
| ``` | ||||
| 
 | ||||
| ## Complete Demo | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was tested in macOS.  The path names will differ in other platforms. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Create the standalone `xlsx-cli` binary: | ||||
| 
 | ||||
| ```bash | ||||
| cd /tmp | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz exit-on-epipe commander@2 | ||||
| curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js | ||||
| npx nexe -t 14.15.3 xlsx-cli.js | ||||
| ``` | ||||
| 
 | ||||
| This is discussed in ["Command-line Tools"](/docs/demos/desktop/cli) | ||||
| 
 | ||||
| 2) Move the generated `xlsx-cli` to a fixed location in `/usr/local/bin`: | ||||
| 
 | ||||
| ```bash | ||||
| mkdir -p /usr/local/bin | ||||
| mv xlsx-cli /usr/local/bin/ | ||||
| ``` | ||||
| 
 | ||||
| ### Reading a Local File | ||||
| 
 | ||||
| 3) In a new Mathematica notebook, run the following snippet: | ||||
| 
 | ||||
| ```mathematica | ||||
| SheetJSImportFile[x_] := ImportString[Block[{Print}, ExternalEvaluate[ | ||||
|   "Shell" -> "StandardOutput", | ||||
|   "/usr/local/bin/xlsx-cli " <> x | ||||
| ]], "Dataset", "HeaderLines" -> 1] | ||||
| ``` | ||||
| 
 | ||||
| 4) Download <https://sheetjs.com/pres.numbers> and save to Downloads folder. | ||||
| 
 | ||||
| 5) In the Mathematica notebook, run the new function. If the file was saved to | ||||
| the Downloads folder, the path will be `"~/Downloads/pres.numbers"` in macOS: | ||||
| 
 | ||||
| ```mathematica | ||||
| data = SheetJSImportFile["~/Downloads/pres.numbers"] | ||||
| ``` | ||||
| 
 | ||||
| The result should be displayed in a concise table. | ||||
| 
 | ||||
| ### Reading from a URL | ||||
| 
 | ||||
| `FetchURL` downloads a file from a specified URL. This function will be wrapped | ||||
| in a new function called `SheetJSImportURL`. | ||||
| 
 | ||||
| 6) In the same notebook, run the following: | ||||
| 
 | ||||
| ```mathematica | ||||
| Needs["Utilities`URLTools`"]; | ||||
| SheetJSImportURL[x_] := Module[{path},( | ||||
|   path = FetchURL["https://sheetjs.com/pres.numbers"]; | ||||
|   SheetJSImportFile[path] | ||||
| )]; | ||||
| ``` | ||||
| 
 | ||||
| 7) Test by downloading the test file in the notebook: | ||||
| 
 | ||||
| ```mathematica | ||||
| data = SheetJSImportURL["https://sheetjs.com/pres.numbers"] | ||||
| ``` | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user