如何使用 sheetJS 和节点读取上传文件的 sheet 数据?
How to read sheet data of uploaded file with using sheetJS and node?
所以上传的文件是sheetJS需要读取的excel文件,否则会显示为{}。
app.post('/sendExcel', function(req, res) {
let data = req.body;
var workbook = sheetJS.read(data, {type: 'buffer'});
console.log(workbook.Sheets['Sheet1); //prints... "{ A1: { t: 's', v: '[object Object]' }, '!ref': 'A1' }"
let excel = workbook.Sheets['Sheet1']['A1']['v'][0]; //prints... "["
所以我尝试了各种方法,包括更改客户端类型,因为我在缓冲区类型方面遇到了问题。所以现在它可以部分工作,但我仍然无法访问 sheet.
中的数据
例如,我在这里使用了文件路径,它显示正常工作。
app.get('/excel', function(err, res, data) {
var wb = sheetJS.readFile("data.xlsx");
let excel = wb.Sheets['Sheet1']['A1']['v'];
console.log(excel); //this prints "vehicle", which is what is supposed to happen, not "[".
res.send(excel)
});
我应该从表单上传中获取 excel 数据。这就是问题所在。现在发送到数据库是成功的,但不会访问整个数据。我想我需要将它改回数组。
您可以使用:
var fileReader = new FileReader();
fileReader.readAsArrayBuffer(workbook);
但这不会 运行 在 app.js
这是我对客户端和服务器端的另一个回答。这可能对其他人有帮助。
不要使用文件 reader。通常将 excel sheet 附加到正文中的表单。
客户端:
let excelInput = document.getElementById("fileToUpload");
//excelInput: this html element allows you to upload the excel sheet to it
let excelFile = excelInput.files[0];
let form = new FormData();
form.append("excel", excelFile);
fetch('/sendExcel', {method: "POST", body: form})
.then((data) => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
然后使用强大的服务器端。
服务器端:
const sheetJS = require('xlsx');
const formidable = require('formidable');
app.post('/excel', function(req, res) {
let data = req.body;
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files, next) => {
if (err) {
next(err);
return;
}
var f = files[Object.keys(files)[0]];
var workbook = sheetJS.readFile(f.path);
res.send(workbook);
});
});
这么厉害必须要用,不然没法用。然后你可以使用 sheetJS.readFile 而不是 sheetJS.read.
所以上传的文件是sheetJS需要读取的excel文件,否则会显示为{}。
app.post('/sendExcel', function(req, res) {
let data = req.body;
var workbook = sheetJS.read(data, {type: 'buffer'});
console.log(workbook.Sheets['Sheet1); //prints... "{ A1: { t: 's', v: '[object Object]' }, '!ref': 'A1' }"
let excel = workbook.Sheets['Sheet1']['A1']['v'][0]; //prints... "["
所以我尝试了各种方法,包括更改客户端类型,因为我在缓冲区类型方面遇到了问题。所以现在它可以部分工作,但我仍然无法访问 sheet.
中的数据例如,我在这里使用了文件路径,它显示正常工作。
app.get('/excel', function(err, res, data) {
var wb = sheetJS.readFile("data.xlsx");
let excel = wb.Sheets['Sheet1']['A1']['v'];
console.log(excel); //this prints "vehicle", which is what is supposed to happen, not "[".
res.send(excel)
});
我应该从表单上传中获取 excel 数据。这就是问题所在。现在发送到数据库是成功的,但不会访问整个数据。我想我需要将它改回数组。
您可以使用:
var fileReader = new FileReader();
fileReader.readAsArrayBuffer(workbook);
但这不会 运行 在 app.js
这是我对客户端和服务器端的另一个回答。这可能对其他人有帮助。
不要使用文件 reader。通常将 excel sheet 附加到正文中的表单。
客户端:
let excelInput = document.getElementById("fileToUpload");
//excelInput: this html element allows you to upload the excel sheet to it
let excelFile = excelInput.files[0];
let form = new FormData();
form.append("excel", excelFile);
fetch('/sendExcel', {method: "POST", body: form})
.then((data) => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
然后使用强大的服务器端。
服务器端:
const sheetJS = require('xlsx');
const formidable = require('formidable');
app.post('/excel', function(req, res) {
let data = req.body;
const form = formidable({ multiples: true });
form.parse(req, (err, fields, files, next) => {
if (err) {
next(err);
return;
}
var f = files[Object.keys(files)[0]];
var workbook = sheetJS.readFile(f.path);
res.send(workbook);
});
});
这么厉害必须要用,不然没法用。然后你可以使用 sheetJS.readFile 而不是 sheetJS.read.