将Json转换成Xlsx文件

我正在尝试将json数据转换为Xlsx文件并将其保存在一个文件夹中。 我一直在尝试使用icg-json-to-xlsx模块,但直到现在我一直无法使用它。 我的代码如下所示:

jsonXlsx = require('icg-json-to-xlsx'); filename = path.join('./files', "output.xlsx"); outputFile = jsonXlsx(filename, result) //result contains json data console.log(outputFile); 

但是我得到了这个错误

 outputFile = jsonXlsx(filename, result) ^ TypeError: Property 'jsonXlsx' of object # is not a function 

从mongodb获取数据:在路由中:

 router.get('/', function(req, res, next) { fileController.getAll(function(err, result){ if(err){ res.send(500,err); } // res.json(result); var data = result; 

在控制器中:

 FileController.prototype.getAll = function(callback){ File.find( {}, {_id: false, id: true, name: true, status: true}, function(err, file){ if(err) { return callback(err); } else { if (!file) { return callback('file not found'); } } callback(null, file); } )}; 

尝试这个

  outputFile = jsonXlsx.writeFile(filename, result); 

jsonXlsx是对象,它包含像writeFile,writeBuffer这样的方法,所以你不能调用jsonXlsx作为函数…或者你需要像这样的函数添加引用

 jsonXlsxWriteFile = require('icg-json-to-xlsx').writeFile; outputFile = jsonXlsxWriteFile(filename, result) 

 var jsonXlsx = require('icg-json-to-xlsx'); var path = require('path'); var filename = path.join('./files', "output.xlsx"); var result = [ { id: '1', name: 'test', status: '123' }, { id: '2', name: 'david', status: '323'}, { id: '3', name: 'ram', status: '2323' } ]; var outputFile = jsonXlsx.writeFile(filename, JSON.stringify(result)); console.log(outputFile); 

更新

 File .find({ }) .select({ _id: false, id: true, name: true, status: true }) .lean() .exec(function(err, file) { // }); 

在你的情况下,查询返回MongooseDocuments,但jsonXlsx需要普通的JavaScript对象,所以这就是为什么你应该使用lean()

你可以试试Alasql JavaScript SQL库。 它包括一个模块来处理JSON和XLSX文件(支持js-xlsx.js库)。

将这两个库安装到您的项目中。

 npm install alasql npm install xlsx 

然后调用alasql函数:

 var alasql = require(alasql); alasql('SELECT * INTO XLSX("mydata.xlsx",{headers:true}) \ FROM JSON("mydata.json")'); var cities = [{City:'London',Population:2500000},{City:"Paris",Population:2000000}]; alasql("SELECT * INTO XLSX("mydata.xlsx",{headers:true}) FROM ?",[cities]); 

查看此演示文件中的更多示例。

有很多模块可以做到这一点。 但是如果你想控制xlsx文件的格式,那么我build议你使用下面的代码。 行包含JSON数组forms的数据。

 var excel = require('node-excel-export'); var styles = { headerDark: { fill: { fgColor: { rgb: 'FF000000' } }, font: { color: { rgb: 'FFFFFFFF' }, sz: 14, bold: true, underline: true } }, cellPink: { fill: { fgColor: { rgb: 'FFFFCCFF' } } }, cellGreen: { fill: { fgColor: { rgb: 'FF00FF00' } } } }; var specification = { "Col1": { "displayName": 'Col1Name', "headerStyle": styles.headerDark, "width": 250 }, "Col2": { "displayName": 'Col2Name', "headerStyle": styles.headerDark, "width": 215 }, "Col3": { displayName: 'Col3Name', headerStyle: styles.headerDark, width: 150 } } var report = excel.buildExport( [{ name: 'Report.xlsx', specification: specification, data: rows }] );