forked from sheetjs/docs.sheetjs.com
		
	stata demos refresh
This commit is contained in:
		
							parent
							
								
									98a3b79e9c
								
							
						
					
					
						commit
						2e44e0c2c8
					
				| @ -118,7 +118,12 @@ builder requires a proper `package.json` that includes the SheetJS dependency. | ||||
| 
 | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This example was last tested on 2024-02-21 against BunJS 1.0.28 on macOS 14.3.1. | ||||
| This demo was last tested in the following deployments: | ||||
| 
 | ||||
| | Architecture | BunJS   | Date       | | ||||
| |:-------------|:--------|:-----------| | ||||
| | `darwin-x64` | `1.1.3` | 2024-04-10 | | ||||
| | `win10-x64`  | `1.1.3` | 2024-04-10 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -46,7 +46,12 @@ This demo covers Stata extensions. For directly processing Stata DTA files, the | ||||
| 
 | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested by SheetJS users on 2023 November 15. | ||||
| This demo was tested by SheetJS users in the following deployments: | ||||
| 
 | ||||
| | Architecture | Date       | | ||||
| |:-------------|:-----------| | ||||
| | `darwin-x64` | 2024-04-10 | | ||||
| | `win10-x64`  | 2024-04-10 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -106,10 +111,49 @@ flowchart LR | ||||
| Stata C extensions are shared libraries or DLLs that use special Stata methods | ||||
| for parsing arguments and returning values. | ||||
| 
 | ||||
| Arguments are passed to the `stata_call` function in the DLL. | ||||
| #### Structure | ||||
| 
 | ||||
| Arguments are passed to the `stata_call` function in the plugin.[^4] The | ||||
| function receives the argument count and an array of C strings: | ||||
| 
 | ||||
| ```c title="stata_call declaration" | ||||
| STDLL stata_call(int argc, char *argv[]); | ||||
| ``` | ||||
| 
 | ||||
| For example, `argc` is 2 and `argv` has two C strings in the following command: | ||||
| 
 | ||||
| ```stata | ||||
| plugin call cleanfile, "pres.numbers" verbose | ||||
| * arguments start | ||||
| * argv[0]               ^^^^^^^^^^^^ | ||||
| * argv[1]                             ^^^^^^^ | ||||
| * argc = 2 | ||||
| ``` | ||||
| 
 | ||||
| #### Communication | ||||
| 
 | ||||
| `SF_display` and `SF_error` display text and error messages respectively. | ||||
| 
 | ||||
| Message text follows the "Stata Markup and Control Language"[^5]. | ||||
| 
 | ||||
| `{stata ...}` is a special directive that displays the arguments and creates a | ||||
| clickable link. Clicking the link will run the string. | ||||
| 
 | ||||
| For example, a plugin may attempt to print a link: | ||||
| 
 | ||||
| ```c title="SF_display C plugin example" | ||||
| SF_display("{stata import excel \"sheetjs.tmp.xlsx\", firstrow} will read the first sheet and use headers\n"); | ||||
| ``` | ||||
| 
 | ||||
| The function will print the following text to the terminal: | ||||
| 
 | ||||
| <pre> | ||||
| <span {...b}>import excel "sheetjs.tmp.xlsx", firstrow</span> will read the first sheet and use headers{'\n'} | ||||
| </pre> | ||||
| 
 | ||||
| The blue text is clickable. When a user clicks the text, the command | ||||
| `import excel "sheetjs.tmp.xlsx", firstrow` will be executed. | ||||
| 
 | ||||
| ### Duktape JS Engine | ||||
| 
 | ||||
| This demo uses the [Duktape JavaScript engine](/docs/demos/engines/duktape). The | ||||
| @ -410,4 +454,6 @@ browse Name Index | ||||
| 
 | ||||
| [^1]: Run `help import excel` in Stata or see ["import excel"](https://www.stata.com/manuals/dimportexcel.pdf) in the Stata documentation. | ||||
| [^2]: See [`read` in "Reading Files"](/docs/api/parse-options) | ||||
| [^3]: See [`write` in "Writing Files"](/docs/api/write-options) | ||||
| [^3]: See [`write` in "Writing Files"](/docs/api/write-options) | ||||
| [^4]: See ["Creating and using Stata plugins"](https://www.stata.com/plugins/#sect8) in the Stata website | ||||
| [^5]: run `help smcl` in Stata or see ["smcl"](https://www.stata.com/manuals/psmcl.pdf) in the Stata documentation. | ||||
| @ -32,6 +32,18 @@ reported to [the issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues). | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::info Limitations | ||||
| 
 | ||||
| In Stata parlance, versions 102-105, 108, 110-115, and 117-121 are supported. | ||||
| This corresponds to the known file versions across all releases through Stata 18. | ||||
| 
 | ||||
| Consistent with spreadsheet software limitations, the first 1048576 observations | ||||
| and 16384 variables are extracted. | ||||
| 
 | ||||
| Alias variables (supported in DTA versions 120-121) are not processed. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Live Demo | ||||
| 
 | ||||
| This demo fetches a [sample DTA file](pathname:///dta/pres.dta), parses the data | ||||
| @ -54,14 +66,14 @@ function SheetJSDTA() { | ||||
|   const [__html, setHTML] = React.useState(""); | ||||
|   const [text, setText] = React.useState(""); | ||||
| 
 | ||||
|   const process = (u8) => { | ||||
|   const process = (ab) => { | ||||
|     try { | ||||
|       /* Initial Setup */ | ||||
|       if(typeof DTA == "undefined") return setText("ERROR: Reload this page!"); | ||||
|       DTA.set_utils(XLSX.utils); | ||||
| 
 | ||||
|       /* Parse DTA */ | ||||
|       const wb = DTA.parse(u8); | ||||
|       const wb = DTA.parse(new Uint8Array(ab)); | ||||
| 
 | ||||
|       /* Generate HTML */ | ||||
|       setHTML(XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]])); | ||||
| @ -69,19 +81,18 @@ function SheetJSDTA() { | ||||
|     } catch(e) { setText("ERROR: " + (e && e.message || e)); } | ||||
|   }; | ||||
| 
 | ||||
|   /* Fetch test file on load */ | ||||
|   React.useEffect(() => { (async() => { | ||||
|     /* Fetch file */ | ||||
|     process(new Uint8Array(await (await fetch("/dta/pres.dta")).arrayBuffer())); | ||||
|     process(await (await fetch("/dta/pres.dta")).arrayBuffer()); | ||||
|   })(); }, []); | ||||
|   const goodstyle = { backgroundColor: "#C6EFCE", color: "#006100" }; | ||||
|   const badstyle = { backgroundColor: "#FFC7CE", color: "#9C0006" }; | ||||
| 
 | ||||
|   const good = { backgroundColor: "#C6EFCE", color: "#006100" }; | ||||
|   const bad = { backgroundColor: "#FFC7CE", color: "#9C0006" }; | ||||
|   return ( <> | ||||
|     {/* Import Button */} | ||||
|     <input type="file" onChange={async(e) => { | ||||
|       process(new Uint8Array(await e.target.files[0].arrayBuffer())); | ||||
|       process(await e.target.files[0].arrayBuffer()); | ||||
|     }}/> | ||||
|     {text && <code style={/ERROR/.test(text)?badstyle:goodstyle}>{text}</code>} | ||||
|     {text && <code style={/ERROR/.test(text)?bad:good}>{text}</code>} | ||||
|     <div dangerouslySetInnerHTML={{ __html }}/> | ||||
|   </> ); | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user