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