将Json转换为Xlsx文件

时间:2014-12-04 06:08:13

标签: json node.js excel file

我正在尝试将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);
}
)};

3 个答案:

答案 0 :(得分: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中的更多示例。

答案 1 :(得分:1)

有很多模块可以做到这一点。但是如果你想控制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
    }]
);

答案 2 :(得分: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()