forked from sheetjs/docs.sheetjs.com
		
	ssf-live
This commit is contained in:
		
							parent
							
								
									cf283192e1
								
							
						
					
					
						commit
						36d350427c
					
				@ -21,8 +21,8 @@ Each standalone release script is available at <https://cdn.sheetjs.com/>.
 | 
			
		||||
 | 
			
		||||
When referencing by file name, AMD loaders typically omit the file extension.
 | 
			
		||||
 | 
			
		||||
The actual file name is `xlsx.full.min.js`, but the examples will refer to the
 | 
			
		||||
script as `xlsx.full.min`.
 | 
			
		||||
The actual file name is `xlsx.full.min.js`, but the examples identify the script
 | 
			
		||||
using the name `xlsx.full.min`
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ This demo was tested in the following environments:
 | 
			
		||||
 | 
			
		||||
| Environment         | AlaSQL |    Date    |
 | 
			
		||||
|:--------------------|:-------|:----------:|
 | 
			
		||||
| NodeJS              | 3.1.0  | 2023-07-24 |
 | 
			
		||||
| NodeJS              | 3.1.0  | 2023-10-26 |
 | 
			
		||||
| Standalone (Chrome) | 3.0.0  | 2023-08-20 |
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
@ -119,7 +119,7 @@ This demo was tested in the following deployments:
 | 
			
		||||
 | 
			
		||||
| Architecture | Version | Date       |
 | 
			
		||||
|:-------------|:--------|:-----------|
 | 
			
		||||
| `darwin-x64` | `2.7.0` | 2023-07-24 |
 | 
			
		||||
| `darwin-x64` | `2.7.0` | 2023-10-26 |
 | 
			
		||||
| `darwin-arm` | `2.7.0` | 2023-10-18 |
 | 
			
		||||
| `win10-x64`  | `2.7.0` | 2023-07-24 |
 | 
			
		||||
| `win11-arm`  | `2.7.0` | 2023-09-26 |
 | 
			
		||||
@ -293,23 +293,40 @@ may not work on every platform.
 | 
			
		||||
 | 
			
		||||
### Perl
 | 
			
		||||
 | 
			
		||||
The Perl binding for Duktape is available on CPAN:
 | 
			
		||||
The Perl binding for Duktape is available as `JavaScript::Duktape` on CPAN.
 | 
			
		||||
 | 
			
		||||
The Perl binding does not have raw `Buffer` ops, so Base64 strings are used.
 | 
			
		||||
 | 
			
		||||
#### Perl Demo
 | 
			
		||||
 | 
			
		||||
:::note
 | 
			
		||||
 | 
			
		||||
This demo was tested in the following deployments:
 | 
			
		||||
 | 
			
		||||
| Architecture | Version | Date       |
 | 
			
		||||
|:-------------|:--------|:-----------|
 | 
			
		||||
| `darwin-x64` | `2.5.0` | 2023-10-26 |
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
0) Ensure `perl` and `cpan` are installed and available on the system path.
 | 
			
		||||
 | 
			
		||||
1) Install the `JavaScript::Duktape` library:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cpan install JavaScript::Duktape
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The Perl binding does not have raw `Buffer` ops, so Base64 strings are used.
 | 
			
		||||
With the [ExtendScript](/docs/getting-started/installation/extendscript) build:
 | 
			
		||||
2) Save the following codeblock to `SheetJSDuk.pl`:
 | 
			
		||||
 | 
			
		||||
```perl SheetJSDuk.pl
 | 
			
		||||
```perl title="SheetJSDuk.pl"
 | 
			
		||||
# usage: perl SheetJSDuk.pl path/to/file
 | 
			
		||||
use JavaScript::Duktape;
 | 
			
		||||
use File::Slurp;
 | 
			
		||||
use MIME::Base64 qw( encode_base64 decode_base64 );
 | 
			
		||||
 | 
			
		||||
# Initialize
 | 
			
		||||
my $js = JavaScript::Duktape->new( max_memory => 1024 * 1024 * 1024 );
 | 
			
		||||
my $js = JavaScript::Duktape->new( max_memory => 256 * 1024 * 1024 );
 | 
			
		||||
$js->eval("var global = (function(){ return this; }).call(null);");
 | 
			
		||||
 | 
			
		||||
# Load the ExtendScript build
 | 
			
		||||
@ -325,15 +342,31 @@ $js->eval("log('SheetJS library version ' + XLSX.version);");
 | 
			
		||||
my $raw_data = encode_base64(read_file($ARGV[0], { binmode => ':raw' }), "");
 | 
			
		||||
$js->set("b64", $raw_data);
 | 
			
		||||
$js->eval(qq{
 | 
			
		||||
  global.wb = XLSX.read(b64, {type: "base64"});
 | 
			
		||||
  global.wb = XLSX.read(b64, {type: "base64", WTF:1});
 | 
			
		||||
  global.ws = wb.Sheets[wb.SheetNames[0]];
 | 
			
		||||
  void 0;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
# Print first worksheet CSV
 | 
			
		||||
my $csv = $js->eval('XLSX.utils.sheet_to_csv(global.ws)');
 | 
			
		||||
print $csv
 | 
			
		||||
$js->eval('log(XLSX.utils.sheet_to_csv(global.ws))');
 | 
			
		||||
 | 
			
		||||
# Write XLSB file
 | 
			
		||||
my $xlsb = $js->eval("XLSX.write(global.wb, {type:'base64', bookType:'xlsb'})");
 | 
			
		||||
write_file("SheetJSDuk.xlsb", decode_base64($xlsb));
 | 
			
		||||
```
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
3) Download the SheetJS ExtendScript build and test file:
 | 
			
		||||
 | 
			
		||||
<CodeBlock language="bash">{`\
 | 
			
		||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js
 | 
			
		||||
curl -LO https://sheetjs.com/pres.xlsx`}
 | 
			
		||||
</CodeBlock>
 | 
			
		||||
 | 
			
		||||
4) Run the script:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
perl SheetJSDuk.pl pres.xlsx
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If the script succeeded, the data in the test file will be printed in CSV rows.
 | 
			
		||||
The script will also export `SheetJSDuk.xlsb`.
 | 
			
		||||
@ -120,21 +120,26 @@ This string can be loaded into the JS engine and processed:
 | 
			
		||||
 | 
			
		||||
:::note
 | 
			
		||||
 | 
			
		||||
This demo was tested on 2023-07-26 using Rhino 1.7.14.
 | 
			
		||||
This demo was tested on 2023-10-26 against Rhino 1.7.14.
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
0) Ensure Java is installed.  Create a folder for the project, download the
 | 
			
		||||
[JAR](https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar)
 | 
			
		||||
and rename to `rhino.jar`:
 | 
			
		||||
0) Ensure Java is installed.
 | 
			
		||||
 | 
			
		||||
1) Create a folder for the project:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
mkdir sheetjs-java
 | 
			
		||||
cd sheetjs-java
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2) Download the Rhino JAR and rename to `rhino.jar`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
1) Download the SheetJS Standalone script and the test file. Save both files in
 | 
			
		||||
3) Download the SheetJS Standalone script and the test file. Save both files in
 | 
			
		||||
the project directory:
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
@ -147,14 +152,14 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
 | 
			
		||||
curl -LO https://sheetjs.com/pres.xlsx`}
 | 
			
		||||
</CodeBlock>
 | 
			
		||||
 | 
			
		||||
2) Download [`SheetJSRhino.zip`](pathname:///rhino/SheetJSRhino.zip) and unzip
 | 
			
		||||
4) Download [`SheetJSRhino.zip`](pathname:///rhino/SheetJSRhino.zip) and unzip
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
curl -LO https://docs.sheetjs.com/rhino/SheetJSRhino.zip
 | 
			
		||||
unzip SheetJSRhino.zip
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
3) Save the following code to `SheetJSRhino.java`:
 | 
			
		||||
5) Save the following code to `SheetJSRhino.java`:
 | 
			
		||||
 | 
			
		||||
```java title="SheetJSRhino.java"
 | 
			
		||||
/* sheetjs (C) 2013-present  SheetJS -- https://sheetjs.com */
 | 
			
		||||
@ -184,14 +189,14 @@ public class SheetJSRhino {
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
4) Assemble `SheetJS.jar` from the demo code:
 | 
			
		||||
6) Assemble `SheetJS.jar` from the demo code:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
javac -cp .:rhino.jar SheetJSRhino.java
 | 
			
		||||
jar -cf SheetJS.jar SheetJSRhino.class com/sheetjs/*.class xlsx.full.min.js
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
5) Test the program:
 | 
			
		||||
7) Test the program:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
java -cp .:SheetJS.jar:rhino.jar SheetJSRhino pres.xlsx
 | 
			
		||||
 | 
			
		||||
@ -133,7 +133,7 @@ This demo was tested in the following environments:
 | 
			
		||||
 | 
			
		||||
| Architecture | Swift   | Date       |
 | 
			
		||||
|:-------------|:--------|:-----------|
 | 
			
		||||
| `darwin-x64` | `5.8.1` | 2023-07-24 |
 | 
			
		||||
| `darwin-x64` | `5.9.0` | 2023-10-26 |
 | 
			
		||||
| `darwin-arm` | `5.9.0` | 2023-10-18 |
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
@ -146,14 +146,22 @@ This example requires MacOS + Swift and will not work on Windows or Linux!
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
0) Ensure Xcode is installed.  Create a folder for the project:
 | 
			
		||||
0) Ensure Swift is installed by running the following command in the terminal:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
swiftc --version
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If the command is not found, install Xcode.
 | 
			
		||||
 | 
			
		||||
1) Create a folder for the project:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
mkdir sheetjswift
 | 
			
		||||
cd sheetjswift
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
1) Download the SheetJS Standalone script and the test file. Save both files in
 | 
			
		||||
2) Download the SheetJS Standalone script and the test file. Save both files in
 | 
			
		||||
the project directory:
 | 
			
		||||
 | 
			
		||||
<ul>
 | 
			
		||||
@ -166,7 +174,7 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
 | 
			
		||||
curl -LO https://sheetjs.com/pres.numbers`}
 | 
			
		||||
</CodeBlock>
 | 
			
		||||
 | 
			
		||||
2) Download the Swift scripts for the demo
 | 
			
		||||
3) Download the Swift scripts for the demo
 | 
			
		||||
 | 
			
		||||
- [`SheetJSCore.swift`](pathname:///swift/SheetJSCore.swift) Wrapper library
 | 
			
		||||
- [`main.swift`](pathname:///swift/main.swift) Command-line script
 | 
			
		||||
@ -177,13 +185,13 @@ curl -LO https://docs.sheetjs.com/swift/main.swift
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
3) Build the `SheetJSwift` binary:
 | 
			
		||||
4) Build the `SheetJSwift` program:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
swiftc SheetJSCore.swift main.swift -o SheetJSwift
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
4) Test the program:
 | 
			
		||||
5) Test the program:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./SheetJSwift pres.numbers
 | 
			
		||||
 | 
			
		||||
@ -262,7 +262,7 @@ This demo was tested in the following deployments:
 | 
			
		||||
 | 
			
		||||
| Architecture | Git Commit | Date       |
 | 
			
		||||
|:-------------|:-----------|:-----------|
 | 
			
		||||
| `darwin-x64` | `2788d71`  | 2023-07-24 |
 | 
			
		||||
| `darwin-x64` | `2788d71`  | 2023-10-26 |
 | 
			
		||||
| `darwin-arm` | `2788d71`  | 2023-10-18 |
 | 
			
		||||
| `win10-x64`  | `2788d71`  | 2023-10-09 |
 | 
			
		||||
| `win11-arm`  | `2788d71`  | 2023-09-25 |
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
title: SSF Number Formatter
 | 
			
		||||
hide_table_of_contents: true
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
As explained in ["Number Formats"](/docs/csf/features/nf), modern spreadsheet
 | 
			
		||||
@ -7,7 +8,7 @@ file formats separate "content" from "presentation". Instead of storing a
 | 
			
		||||
formatted value like `$3.50`, applications will store the underlying value
 | 
			
		||||
(`3.50`) and the number format (`$0.00`). Parsers are expected to render values.
 | 
			
		||||
 | 
			
		||||
The SheetJS `SSF` ("SpreadSheet Formatter") library formats numbers according
 | 
			
		||||
The SheetJS `SSF` ("SpreadSheet Format") library formats numbers according
 | 
			
		||||
to the number formatting rules defined in Excel and other spreadsheet software[^1]
 | 
			
		||||
 | 
			
		||||
A version of the library ships with the main file processing library. It is
 | 
			
		||||
@ -19,6 +20,36 @@ The library is also available for standalone use on the SheetJS CDN[^5].
 | 
			
		||||
The source code and project documentation is hosted on the SheetJS git server at
 | 
			
		||||
<https://git.sheetjs.com/sheetjs/sheetjs/src/branch/master/packages/ssf>
 | 
			
		||||
 | 
			
		||||
## Live Demo
 | 
			
		||||
 | 
			
		||||
The formatted text is calculated from the specified number format and value.
 | 
			
		||||
Please [report an issue](https://git.sheetjs.com/sheetjs/sheetjs/issues) if a
 | 
			
		||||
particular format is not supported.
 | 
			
		||||
 | 
			
		||||
```jsx live
 | 
			
		||||
function SheetJSSSF() {
 | 
			
		||||
  const [fmt, setFmt] = React.useState("#,##0");
 | 
			
		||||
  const [val, setVal] = React.useState(7262);
 | 
			
		||||
 | 
			
		||||
  const format = (fmt, val) => { try {
 | 
			
		||||
    return XLSX.SSF.format(fmt, val);
 | 
			
		||||
  } catch(e) { return "ERROR: " + (e && e.message || e); } };
 | 
			
		||||
 | 
			
		||||
  return ( <table>
 | 
			
		||||
    <tr><td><b>Number Format</b></td><td>
 | 
			
		||||
      <input type="text" value={fmt} onChange={e => setFmt(e.target.value)}/>
 | 
			
		||||
    </td></tr>
 | 
			
		||||
    <tr><td><b>Number Value</b></td><td>
 | 
			
		||||
      <input type="text" value={val} onChange={e => setVal(+e.target.value)}/>
 | 
			
		||||
    </td></tr>
 | 
			
		||||
    <tr><td colspan="2"></td></tr>
 | 
			
		||||
    <tr><td><b>Formatted Text</b></td><td>
 | 
			
		||||
      <code>{format(fmt, val)}</code>
 | 
			
		||||
    </td></tr>
 | 
			
		||||
  </table> );
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[^1]: The number formatting rules are sketched in ECMA-376. A rough grammar is defined in the MS-XLS specification.
 | 
			
		||||
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options)
 | 
			
		||||
[^3]: See [`write` in "Writing Files"](/docs/api/write-options)
 | 
			
		||||
 | 
			
		||||
@ -181,9 +181,12 @@ const config = {
 | 
			
		||||
        { from: '/docs/demos/vue', to: '/docs/demos/frontend/vue/' },
 | 
			
		||||
        { from: '/docs/demos/bundler', to: '/docs/demos/frontend/bundler/' },
 | 
			
		||||
        { from: '/docs/demos/legacy', to: '/docs/demos/frontend/legacy/' },
 | 
			
		||||
        { from: '/docs/demos/rollup', to: '/docs/demos/frontend/bundler/rollup/' },
 | 
			
		||||
        { from: '/docs/getting-started/demos/legacy', to: '/docs/demos/frontend/legacy/' },
 | 
			
		||||
        { from: '/docs/getting-started/demos/bundler', to: '/docs/demos/frontend/bundler/' },
 | 
			
		||||
        /* cloud */
 | 
			
		||||
        { from: '/docs/demos/salesforce', to: '/docs/demos/cloud/salesforce/' },
 | 
			
		||||
        { from: '/docs/getting-started/demos/salesforce', to: '/docs/demos/cloud/salesforce/' },
 | 
			
		||||
        { from: '/docs/demos/aws', to: '/docs/demos/cloud/aws/' },
 | 
			
		||||
        { from: '/docs/demos/azure', to: '/docs/demos/cloud/azure/' },
 | 
			
		||||
        { from: '/docs/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
 | 
			
		||||
@ -214,6 +217,7 @@ const config = {
 | 
			
		||||
        { from: '/docs/getting-started/demos/network', to: '/docs/demos/net/network/' },
 | 
			
		||||
        /* local */
 | 
			
		||||
        { from: '/docs/demos/clipboard', to: '/docs/demos/local/clipboard/' },
 | 
			
		||||
        { from: '/docs/getting-started/demos/clipboard', to: '/docs/demos/local/clipboard/' },
 | 
			
		||||
        { from: '/docs/demos/localfile', to: '/docs/demos/local/file/' },
 | 
			
		||||
        { from: '/docs/demos/data/indexeddb', to: '/docs/demos/local/indexeddb/' },
 | 
			
		||||
        { from: '/docs/demos/data/storageapi', to: '/docs/demos/local/storageapi/' },
 | 
			
		||||
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import useBaseUrl from '@docusaurus/useBaseUrl';
 | 
			
		||||
 | 
			
		||||
import { CodePreview } from 'docusaurus-plugin-code-preview';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
export default function Playground(props) {
 | 
			
		||||
  return (
 | 
			
		||||
    <CodePreview
 | 
			
		||||
      output={{
 | 
			
		||||
        outputs: [
 | 
			
		||||
          {
 | 
			
		||||
            name: 'JavaScript',
 | 
			
		||||
            value: 'javascript',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: 'React',
 | 
			
		||||
            value: 'react',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: 'Angular',
 | 
			
		||||
            value: 'angular',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: 'Vue',
 | 
			
		||||
            value: 'vue',
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        // This is the default selected option in the rendered component
 | 
			
		||||
        defaultOutput: 'javascript',
 | 
			
		||||
      }}
 | 
			
		||||
      // Your existing options
 | 
			
		||||
    />
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
export default function Playground(props) {
 | 
			
		||||
  return <CodePreview {...props} src={useBaseUrl(props.src)} />;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user