docs.sheetjs.com/tests/engines/clearscript.sh
2026-03-09 00:32:12 -04:00

59 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# https://docs.sheetjs.com/docs/demos/engines/v8#c
set -e
cd /tmp
rm -rf SheetJSClearScript
mkdir -p SheetJSClearScript
cd SheetJSClearScript
# Disable .NET telemetry
export DOTNET_CLI_TELEMETRY_OPTOUT=1
# Create new console project
dotnet new console
dotnet run
# Add ClearScript package
dotnet add package Microsoft.ClearScript.Complete --version 7.5.0
# Download SheetJS and test file
curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.xlsx
# Replace Program.cs with the demo code
cat > Program.cs << 'EOF'
using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;
/* initialize ClearScript */
var engine = new V8ScriptEngine();
/* Load SheetJS Scripts */
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]);
engine.Script.buf = engine.Script.Array.from(filedata);
engine.Evaluate("var wb = XLSX.read(buf, {type: 'array'});");
/* Print CSV of first worksheet */
engine.Evaluate("var ws = wb.Sheets[wb.SheetNames[0]];");
var csv = engine.Evaluate("XLSX.utils.sheet_to_csv(ws)");
Console.Write(csv);
/* Generate XLSB file and save to SheetJSClearScript.xlsb */
var xlsb = (ITypedArray<byte>)engine.Evaluate("XLSX.write(wb, {bookType: 'xlsb', type: 'buffer'})");
File.WriteAllBytes("SheetJSClearScript.xlsb", xlsb.ToArray());
Console.WriteLine("\nOutput saved to SheetJSClearScript.xlsb");
EOF
# Run the program
dotnet run pres.xlsx
# Verify the XLSB file is valid
npx -y xlsx-cli SheetJSClearScript.xlsb