docs.sheetjs.com/tests/engines/jint.sh

77 lines
2.1 KiB
Bash
Raw Normal View History

2026-01-22 06:59:11 +00:00
#!/bin/bash
# https://docs.sheetjs.com/docs/demos/engines/jint
export DOTNET_CLI_TELEMETRY_OPTOUT=1
cd /tmp
rm -rf SheetJSJint
mkdir SheetJSJint
cd SheetJSJint
dotnet new console
dotnet run
dotnet nuget add source https://www.myget.org/F/jint/api/v3/index.json
dotnet add package Jint --version 4.5.0
curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js
curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.xlsx
cat >Program.cs <<EOF
/* sheetjs (C) 2013-present SheetJS -- https://sheetjs.com */
/* vim: set ts=2: */
using Jint;
/* Initialize Jint */
var engine = new Jint.Engine();
engine.Evaluate("global = globalThis;");
/* Load SheetJS Scripts */
engine.Evaluate(File.ReadAllText("shim.min.js"));
engine.Evaluate(File.ReadAllText("xlsx.full.min.js"));
Console.WriteLine("SheetJS version {0}", engine.Evaluate("XLSX.version"));
/* Read and Parse File */
byte[] filedata = File.ReadAllBytes(args[0]);
Jint.Native.JsValue u8 = engine.Intrinsics.Uint8Array.Construct(filedata);
engine.SetValue("buf", u8);
engine.Evaluate("var wb = XLSX.read(buf);");
/* Print CSV of first worksheet*/
engine.Evaluate("var ws = wb.Sheets[wb.SheetNames[0]];");
Jint.Native.JsValue csv = engine.Evaluate("XLSX.utils.sheet_to_csv(ws)");
Console.Write(csv);
/* Generate XLSB file and save to SheetJSJint.xlsb */
Jint.Native.JsValue xlsb = engine.Evaluate("XLSX.write(wb, {bookType: 'xlsb', type: 'buffer'})");
File.WriteAllBytes("SheetJSJint.xlsb", xlsb.AsUint8Array());
EOF
dotnet run pres.xlsx; echo $?
npx -y xlsx-cli SheetJSJint.xlsb
OS="$(uname -s)"
ARCH="$(uname -m)"
case "$OS" in
Darwin) OS="osx" ;;
Linux) OS="linux" ;;
*) echo "unsupported OS: $OS"; exit 1 ;;
esac
case "$ARCH" in
x86_64) ARCH="x64" ;;
arm64|aarch64) ARCH="arm64" ;;
*) echo "unsupported architecture: $ARCH"; exit 1 ;;
esac
RID="${OS}-${ARCH}"
dotnet publish -c Release -r $RID --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
cp bin/Release/net*/$RID/publish/SheetJSJint .
rm -f SheetJSJint.xlsb
./SheetJSJint pres.xlsx; echo $?
npx -y xlsx-cli SheetJSJint.xlsb