node.js导出excel表格

一:使用框架

      1:express,2:node-xlsx,Github地址,node-xlsx下载方式:npm install node-xlsx --save

二:操作步骤

 1:引入node-xlsx

 2 : 因为涉及到文件的保存引入node.js中的fs模块,1,2步代码如下

let fs = require('fs');
let xlsx = require('node-xlsx');

3:组装数据:node-xlsx实际组装的数据为一个二维数组,例如需要导入的表格数据是[['name','sex','age'],['zs','man','19'],['ls','man','28']] 这个二维数组中的每个数组对应的是excel表格中的一行。具体表格展示内容,自己拼装二维数组就可以了。

以下为我实际中的代码

var express = require('express');
var router = express.Router();
let fs = require('fs');
let xlsx = require('node-xlsx');
router.post('/', function(req, res) {
    let sendData = JSON.parse(req.body.content);//前端传输过来的数据
    let classGuid = req.body.classGuid;
    let tableData = [];
    let tableTitle =['',''];//第一列标题
    let tableTitle1 =['用户','账号']; //第二列标题
    const options = {'!cols': [{ wch: 18}, { wch: 18}]}; //设置表格宽度
    sendData[0].scoreItem.forEach(scoreItem=>{
        tableTitle1.push('成绩');
        tableTitle1.push('所占比重');
       tableTitle.push(scoreItem.scoreName);
       tableTitle.push('');
    });
    tableTitle1.push('总成绩');
    tableData.push(tableTitle);
    tableData.push(tableTitle1);
    sendData.forEach(student=>{
       let tableContent = [student.name,student.number];
       student.scoreItem.forEach(scoreItem=>{
          tableContent.push(scoreItem.score);
          tableContent.push(scoreItem.scoreWidth);
       });
        tableContent.push(student.totalScore);
        tableData.push(tableContent);
    });
    let buffer = xlsx.build([{name: "mySheetName", data: tableData}],options);//生成buffer文件流
    fs.access(`./bin/public/export/grade_${classGuid}.xlsx`,err=>{
        if(err){
        //文件不存在
            //将buffer文件生成excel表格
            fs.writeFileSync(`./bin/public/export/grade_${classGuid}.xlsx`, buffer);
            res.send({path: `/bin/public/export/grade_${classGuid}.xlsx`});
        }else {
            //文件存在,删除文件
            fs.unlink(`./bin/public/export/grade_${classGuid}.xlsx`,err=>{
                //将buffer文件生成excel表格
                fs.writeFileSync(`./bin/public/export/grade_${classGuid}.xlsx`, buffer);
                res.send({path: `/bin/public/export/grade_${classGuid}.xlsx`});
            })
        }
    });
});



module.exports = router;

你可能感兴趣的:(node.js)