```
The ```async``` and ```await``` keywords are required.
Install NodeJs:
https://nodejs.org/en/download/package-manager/
# Description
[//]: #@corifeus-header:end
Utility to convert json to an excel file, based on [Node-Excel-Export](https://github.com/functionscope/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](https://github.com/rikkertkoppes/json2xls), but the XLSX constructing can be CPU intensive so we are offloading the XLSX constructing using a worker thread.
# 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 <https://github.com/functionscope/Node-Excel-Export>
- 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);
});
```