π Convert JSON to Excel XLSX with offloading the constructing the data using a worker thread
npm install p3x-json2xls-worker-thread[//]: #@corifeus-header
    
π Bugs are evidentβ’ - MATRIXοΈ
π§ This project is under active development!
π’ We welcome your feedback and contributions.
``txt`
v22.13.1
[//]: #@corifeus-header:end
Utility to convert json to an excel file, based on Node-Excel-Export using a worker thread by not blocking the NodeJs event loop using async functions and options.
This is a totally fork of the json2xls, but the XLSX constructing can be CPU intensive so we are offloading the XLSX constructing using a worker thread.
Of course, when using a worker thread, the execution is about 20-25ms longer, than when we are in the event loop, so the worker thread is valid when we are generating a big dataset.
`bash`
npm install p3x-json2xls-worker-thread
Use to save as file:
`js
const json2xls = require('p3x-json2xls-worker-thread')
const fs = require('fs').promises
const json = {
foo: 'bar',
qux: 'moo',
poo: 123,
stux: new Date()
}
const executAsync = async() => {
try {
//
let nodeExcelOptions = undefined
/*
The following options are supported:
- style: a styles xml file, see
- fields: either an array or map containing field configuration:
- array: a list of names of fields to be exported, in that order
- object: a map of names of fields to be exported and the types of those fields. Supported types are 'number','string','bool'
*/
if (ifSomeConditionIsTrue) {
nodeExcelOptions = {
fields: ['poo']
}
}
const options = {
output: 'binary' / default / || 'base64',
nodeExcel: nodeExcelOptions
}
const xlsBinary = await json2xls(json, options)
await fs.writeFile('data.xlsx', xlsBinary, 'binary');
} catch(e) {
// handle error
console.error(e)
}
}
executAsync()
`
Or use as express middleware. It adds a convenience xls method to the response object to immediately output an excel as download.
`js
const json2xls = require('p3x-json2xls-worker-thread')
const jsonArr = [{
foo: 'bar',
qux: 'moo',
poo: 123,
stux: new Date()
},
{
foo: 'bar',
qux: 'moo',
poo: 345,
stux: new Date()
}];
app.use(json2xls.middleware);
app.get('/',function(req, res) {
res.xls('data.xlsx', jsonArr);
});
`
It is possible to block the event loop by using the sync function eg.:`js
const json2xls = require('p3x-json2xls-worker-thread')
const json = {
foo: 'bar',
qux: 'moo',
poo: 123,
stux: new Date()
}
const xlsBinary = json2xls.sync(json, {
output: 'base64' // can be binary as well, just sugar...
})
console.log(xlsBinary)
``
[//]: #@corifeus-footer
---
If you want to quickly and affordably develop your next digital project, visit corifeus.eu for expert solutions tailored to your needs.
---
Discover the powerful and free online networking tool at network.corifeus.com.
π Free
Designed for professionals and enthusiasts, this tool provides essential features for network analysis, troubleshooting, and management.
Additionally, it offers tools for:
- π‘ Monitoring TCP, HTTP, and Ping to ensure optimal network performance and reliability.
- π Status page management to track uptime, performance, and incidents in real time with customizable dashboards.
All these features are completely free to use.
---
---
---
π¨ Important Changes: Any breaking changes are prominently noted in the readme to keep you informed.
---
P3X-JSON2XLS-WORKER-THREAD Build v2025.4.121
   
[//]: #@corifeus-footer:end