#!/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)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