【发布时间】:2017-02-03 15:43:42
【问题描述】:
我正在尝试根据从数据库获取的 json 数据在 nodejs 中创建一个 CSV 文件。
我创建一个对象数组作为我的数据
var allExpenses = [];
expenses.forEach(function(expense) {
allExpenses.push({
amount: expense.amount,
identificator: expense.identificator,
person: expense.person.last_name + ' ' + expense.person.first_name,
date: moment.tz(expense.date, "Europe/Budapest").format("D.M.YYYY"),
description: expense.description || '-'
});
});
然后我使用 json2csv 模块创建 csv 数据并通过 fs 将其写入文件
//create csv
var csvFields = ['amount', 'identificator', 'person', 'date', 'description'];
var csv = require('json2csv')({data: allExpenses, fields: csvFields, del: ';'});
var filename = new Date().valueOf() + '_csv_expenses.csv';
var filepath = config.path + '/reports/' + filename;
fs.writeFile(filepath, '\ufeff' + csv, 'utf-8', function(err) {
if(err) {
console.log(err);
res.status(500);
res.json({success: false, msg: 'Error creating csv'});
} else {
console.log('csv file saved');
res.status(200);
res.json({success:true, filename: filename});
}
});
这会正确创建 csv 文件,我可以在 excel 中打开它,但浮点数写入不正确,不能用于 SUM 和其他操作,其中一些被视为 DATE
通过 CTRL + 1 在 Excel 中格式化这些数字 -> NUMBER 也无济于事,因为被视为 DATE 的值完全关闭。
我尝试将选项 excelStrings: true 添加到 json2csv 模块,然后金额被正确写入但被字符串化(=“0.456”)并且也无法转换为数字。
我可以尝试任何提示或建议吗? 任何帮助表示赞赏。
【问题讨论】:
-
您能否分享几行 JSON 输入和 CSV 输出的示例(例如,通过在记事本中打开会得到什么)。目前尚不清楚
expense.amount的格式是什么。此外,您指定了匈牙利 (?) 日期格式,但没有指定运行 Excel 的机器的区域设置,您尝试在该机器上打开 CSV。 -
检查我的答案以获得解决方案,主要问题是浮点数而不是逗号 :)
标签: javascript node.js excel csv floating-point