2014-12-04 67 views
4

我想将json数据转换为Xlsx文件并将其保存在文件夹中。 我一直在尝试使用icg-json-to-xlsx模块,但直到现在我一直无法使用它。 我的代码如下所示:将Json转换为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); 
} 
)}; 

回答

0

试试这个

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()

1

您可以尝试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]); 

参见本demo file更多的例子。

+0

感谢您的信息,但这个问题已经解决:) – ishakya 2014-12-17 04:58:18

0

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

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 
    }] 
);