nodejs express使用node-xlsx实现文件的上传下载导入导出

在express项目中使用node-xlsx实现文件导入导出

npm install node-xlsx --save
1. 上传

app.js

const multer  = require('multer')
app.use(multer({dest: './uploads'}).any())

后端接口:

const path = require("path")
const fs = require('fs');
const xlsx = require('node-xlsx');
// 接口
router.post(
  '/importFile',
  passport.authenticate('jwt', { session: false }),
  (req, res) => {
    let excelContent =xlsx.parse(req.files[0].path);
    let map = {
      '科室名称': 'name',
      '所属院区': 'partName',
      '上级科室': 'equal',
      '科室位置': 'address',
      '状态': 'stateName',
    }

    let partMap = {
      '东院': 'EASTPART',
      '北院': 'NORTHPART',
      '湘南院': 'XIANGNANPART'
    };
    let stateMap = {
      '正常': 0,
      '异常': 1
    }
    let columnName = excelContent[0].data[0];
    let data = excelContent[0].data.slice(1);
    data.forEach(list => {
      let json = {
        name: '',
        part: '',
        partName: '',
        equal: '',
        state: '',
        stateName: '',
      };
      list.forEach((item, index) => {
        let key = map[columnName[index]];
        if (key === 'partName') {
          json.part = partMap[item];
        }
        if (key === 'stateName') {
          json.state = stateMap[item];
        }
        json[key] = item;
        
      })
      json.type =  !json.equal ? '0' : '1'; // 0 一级  1 二级
      Department.findOne({name: json.name}).then(data => {
        if (data) {
          let j = {...json};
          Department.findOneAndUpdate(
            { name: j.name },
            { $set: j},
            { new: true }
          ).then(r => {
            console.log('444444');
          })
        } else {
          new Department(json).save();
        }
        
      })
    })

    res.json({
      code: 0,
      msg: '导入成功',
      data: ''
    })
  }
)

2. 下载

后端接口:http:localhost:3000

const path = require("path")
const fs = require('fs');
const xlsx = require('node-xlsx');
// 接口
router.get('/exportFile',
 (req,res) => {
  Department.find().exec(function(err,data){
      var result=[];
      var title = ['科室','所属院区','上级科室', '科室位置',]//这是第一行 俗称列名
      result.push(title);
      let excelPath = path.resolve(__dirname,'../../exportFiles');
      data.forEach((item) => {
          var itemArr = [];
          itemArr.push(item.name);
          itemArr.push(item.part);
          itemArr.push(item.equal);
          itemArr.push(item.address);
          
          result.push(itemArr);
      });
      var name='科室列表.xlsx';    
      var buffer=xlsx.build([{name:'sheet1',data:result}]);
      fs.writeFile(excelPath+'/' + name,buffer,{'flag':'w'}, err => {
        res.download(excelPath+ '/' +name, downerr => {
          console.log(downerr, '990909')
        }); 
      })
      
  });
});

前端调用:

window.location.href = 'http://localhost:3000/api/department/exportFile'

效果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值