Posted 16 April 2024, 12:51 pm EST
Hi, thank you!
I’ve resolved the error and can now use SpreadJS with Node.js.
Eventually, I plan to load a JSON of SpreadJS and export it as an Excel file.
I’ve written the following code:
const fs = require('fs');
const mockBrowser = require('mock-browser').mocks.MockBrowser;
const fileReader = require('filereader');
const canvas = require("canvas");
const { Blob } = require("buffer");
global.window = mockBrowser.createWindow();
global.document = window.document;
global.navigator = window.navigator;
global.self = global;
global.HTMLCollection = window.HTMLCollection;
global.getComputedStyle = window.getComputedStyle;
global.FileReader = fileReader;
global.canvas = canvas;
const GC = require('@grapecity/spread-sheets');
require('@grapecity/spread-sheets-io');
const ExcelIO = require('@grapecity/spread-excelio');
GC.Spread.Sheets.LicenseKey = "YourSpreadJSLicenseKeyHere";
ExcelIO.LicenseKey = "YourExcelIOLicenseKeyHere";
try {
var wb = new GC.Spread.Sheets.Workbook();
const data = fs.readFileSync('./export.sjs');
const blob = new Blob([data.buffer], { type: "application/zip" });
blob.name = "export.sjs";
blob.stream = fs.createReadStream('./export.sjs');
wb.open(blob, function () {
let sheet = wb.getActiveSheet();
console.log('-------load sjs file-------');
console.log(sheet.name());
console.log(sheet.getValue(3, 4));
}, function (e) {
console.log(e); // error callback
}, {
includeUnusedStyles: false
});
var wb1 = new GC.Spread.Sheets.Workbook();
const data1 = fs.readFileSync('./blank.xlsx');
const blob1 = new Blob([data1.buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
blob1.name = "blank.xlsx";
blob1.stream = fs.createReadStream('blank.xlsx');
wb1.import(blob1, function () {
console.log('-------load excel file---------');
let sheet = wb1.getActiveSheet();
console.log(sheet.name());
console.log(sheet.getArray(0, 0, 3, 1));
const json = wb1.toJSON();
const spread = new GC.Spread.Sheets.Workbook();
const excelIo = new ExcelIO.IO();
spread.fromJSON(json);
console.log('-------export excel file from JSON---------');
excelIo.save(
spread.toJSON(),
(blob) => {
fs.appendFileSync('./export-from-json.xlsx', Buffer.from(blob));
},
(err) => {
logger.error(`Failed to output Excel file. ${err}`);
},
{ useArrayBuffer: true },
)
}, function (msg) {
console.log(msg); // error callback
}, {
fileType: GC.Spread.Sheets.FileType.excel,
});
} catch (e) {
console.error("** Error manipulating spreadsheet **");
console.error(e);
}
Excel file export succeeded. However, when blank.xlsx had images and text boxes pasted onto it, they were lost upon export. Do you have any idea what might be causing?