77 lines
2.1 KiB
Bash
77 lines
2.1 KiB
Bash
|
|
#!/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
|