如何使用sheetJS和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... "["

因此,我尝试了各种操作,包括更改类型客户端,因为我对类型缓冲区有疑问。所以现在它可以部分工作,但是我仍然无法访问工作表中的数据。

作为示例,我在这里改用文件路径,它显示为正常工作。

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中运行

这是我对客户端和服务器端的另一种回答。这可能对其他人有帮助。

Javascript Read Excel file on server with SheetJS

解决方法

终于找到了解决方案! 不要使用文件阅读器。正常情况下,将excel表格添加到表单中。

客户端:

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。我花了很长时间尝试寻找解决方案,因此希望这对一些人有帮助!