RSS Git Download  Clone
  fixtures robo8x [chore] 3/28/2020, 11:22:55 AM 4 years, 4 months ago
  hand-crafted robo8x [chore] 4/17/2020, 4:24:20 PM 4 years, 3 months ago
  mocha robo8x [chore] 3/28/2020, 12:02:17 PM 4 years, 4 months ago
[//]: #@corifeus-header [![NPM](]( [![Donate for Corifeus / P3X](]( [![Contact Corifeus / P3X](]( [![Corifeus @ Facebook](]( [![Uptime Robot ratio (30 days)](]( # 📈 Convert JSON to Excel XLSX with offloading the constructing the data using a worker thread v2024.10.102 **Bugs are evident™ - MATRIX️** ### NodeJS LTS is supported ### Built on NodeJs version ```txt v22.3.0 ``` # Description [//]: #@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. # Installation ```bash npm install p3x-json2xls-worker-thread ``` # Usage 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 --- ## Support Our Open-Source Project ❤️ If you appreciate our work, consider starring this repository or making a donation to support server maintenance and ongoing development. Your support means the world to us—thank you! ### Server Availability Our server may occasionally be down, but please be patient. Typically, it will be back online within 15-30 minutes. We appreciate your understanding. ### About My Domains All my domains, including []( and [](, are developed in my spare time. While you may encounter minor errors, the sites are generally stable and fully functional. ### Versioning Policy **Version Structure:** We follow a Major.Minor.Patch versioning scheme: - **Major:** Corresponds to the current year. - **Minor:** Set as 4 for releases from January to June, and 10 for July to December. - **Patch:** Incremental, updated with each build. **Important Changes:** Any breaking changes are prominently noted in the readme to keep you informed. --- [**P3X-JSON2XLS-WORKER-THREAD**]( Build v2024.10.102 [![NPM](]( [![Donate for Corifeus / P3X](]( [![Contact Corifeus / P3X](]( [![Like Corifeus @ Facebook](]( [//]: #@corifeus-footer:end