docs.sheetjs.com/docz/static/v8/sheetjs-mini-racer.py

29 lines
809 B
Python
Raw Normal View History

2026-03-05 05:25:10 +00:00
from sys import stderr, argv;
from base64 import b64encode, b64decode;
from py_mini_racer import MiniRacer;
with open("xlsx.full.min.js", "rb") as f:
sheetjs = f.read().decode("utf-8");
with open(argv[1], "rb") as f:
file_data = b64encode(f.read()).decode("ascii");
ctx = MiniRacer();
global_scope = ctx.eval("this");
ctx.eval(sheetjs);
version = ctx.eval("XLSX.version");
print(f"SheetJS Version: {version}", file=stderr);
ctx._ctx.set_object_item(global_scope, "fileData", file_data);
ctx.eval("var wb = XLSX.read(fileData, {type:'base64'});");
csv = ctx.eval("XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]);");
print(csv);
xlsb = ctx.eval("XLSX.write(wb, {type: 'base64', bookType: 'xlsb'})");
with open("SheetJSMiniRacer.xlsb", "wb") as f:
f.write(b64decode(xlsb));
ctx.close();