我想在excel表格的第一栏中添加自定义列数据,例如col1,col2,col3 ....等,同时上传到multer
这是我的app.js文件:
//store excel files into one folder
var storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, __dirname + '/uploads/')
},
filename: function(req, file, cb) {
cb(null, file.originalname + '-' + Date.now() + '.xlsx')
}
});
var upload = multer({
storage: storage
});
app.post('/upload', upload.single('file'), function(req, res) {
var XLSX = require('xlsx');
var workbook = XLSX.readFile('./uploads/' + req.file.filename);
var sheet_name_list = workbook.SheetNames;
var data = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
console.log(data);
return res.status(200).send(data);
});
我想在第一列中添加其他自定义字段,例如xlsx文件中的col1,col2 ...
这是普通的xlsx文件:
我想在上传到multer时获得这样的输出
我需要这样:
答案 0 :(得分:0)
我这样做是先将xlsx文件转换为csv,然后附加列键,然后再将该csv转换为json。
这是我完整的代码:
//excel upload
app.post('/upload', uploadmulter, api.Upload);
// store excel files into one folder
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + '/uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + file.originalname)
}
});
var upload = multer({
storage: storage
});
var uploadmulter = upload.single('file');
现在我的api代码:
// showing multer data api
exports.Upload = (req, res) => {
//To convert xlsx to csv
var obj = xlsx.parse('./uploads/' + req.file.filename); // parses a file
var rows = [];
var writeStr = "";
//looping through all sheets
for (var i = 0; i < obj.length; i++) {
var sheet = obj[i];
//loop through all rows in the sheet
for (var j = 0; j < sheet['data'].length; j++) {
//add the row to the rows array
rows.push(sheet['data'][j]);
}
}
//creates the csv string to write it to a file
for (var i = 0; i < rows.length; i++) {
writeStr += rows[i].join(",") + "\n";
}
//writes to a file, but you will presumably send the csv as a
//response instead
fs.writeFile('./uploads/' + req.file.filename, writeStr, function (err) {
if (err) {
return console.log(err);
}
console.log("csv was saved in the current directory!");
// To add headers in CSV
var fd = fs.openSync('./uploads/' + req.file.filename, 'a+');
var data = fs.readFileSync('./uploads/' + req.file.filename); //read existing contents
var fd = fs.openSync('./uploads/' + req.file.filename, 'w+');
var buffer = new Buffer('field1\n');
fs.writeSync(fd, buffer, 0, buffer.length, 0); //write new data
fs.writeSync(fd, data, 0, data.length, buffer.length); //append old data
// or fs.appendFile(fd, data);
fs.close(fd);
// convert csv into Json
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
converter.fromFile('./uploads/' + req.file.filename, function (err,
result) {
if (err) {
console.log("An Error Has Occured");
console.log(err);
}
var data = result;
console.log('data=>>>>>>', data);
return res.status(200).send(data);
});
});
}
我添加了像field1,field2 .....这样的列,而不是col1,col2,col3。