node excell导入导出以及下载

所需依赖安装方式

npm install excel-export
npm install xlsx
npm install moment
npm install fs

进入node项目中执行即可

node

const express = require('express');
const router = express.Router();
const nodeExcel = require('excel-export')
const xlsxs = require('xlsx')
const moment = require('moment')
const fs = require('fs')
const connection = require('../mysql/mysqlUtil');
// 导出到本地
router.get('/export', (req, res) => {
    let arrData = [
        ['name', 'age'],
        ['张三', 20],
        ['李四', 21],
        ['王武', 22],
        ['赵六', 23],
        ['孙琪', 24],];

    let jsonData = [
        {
            name: '张三',
            age: 30
        }, {
            name: "李四",
            age: 31
        }, {
            name: "王武",
            age: 32
        }, {
            name: "赵六",
            age: 33
        }, {
            name: "孙琪",
            age: 34
        }];

// 将数据转成workSheet
//1.arrayData
    let arrayWorkSheet = xlsxs.utils.aoa_to_sheet(arrData);
//2.jsonData
    let jsonWorkSheet = xlsxs.utils.json_to_sheet(jsonData);
//构建workBook
    let workBook = {
        SheetNames: ['arrayWorkSheet', 'jsonWorkSheet'],
        Sheets: {
            'arrayWorkSheet': arrayWorkSheet,
            'jsonWorkSheet': jsonWorkSheet,
        }
    };
    xlsxs.writeFile(workBook, "./excell/works.xlsx");
    // res.send({code: 200, msg: '导出成功', data: xslx.write(workBok, 'userBook.xlsx')});
// xlsx.write(workBok, './excell/works.xlsx');
})
// 导入
router.post('/import', (req, res) => {
    let workbook = xlsxs.readFile('./excell/works.xlsx');
    let sheetNames = workbook.SheetNames;
// 获取第一个workSheet
    let sheet1 = workbook.Sheets[sheetNames[0]];
    console.log(sheet1);

    let range = xlsxs.utils.decode_range(sheet1['!ref']);

//循环获取单元格值
    for (let R = range.s.r; R <= range.e.r; ++R) {
        let row_value = '';
        for (let C = range.s.c; C <= range.e.c; ++C) {
            let cell_address = {c: C, r: R}; //获取单元格地址
            let cell = xlsxs.utils.encode_cell(cell_address); //根据单元格地址获取单元格
            //获取单元格值
            if (sheet1[cell]) {
                // 如果出现乱码可以使用iconv-lite进行转码
                // row_value += iconv.decode(sheet1[cell].v, 'gbk') + ", ";
                row_value += sheet1[cell].v + ", ";
            } else {
                row_value += ", ";
            }
        }
        // console.log(row_value);
    }
});
// 下载
router.get('/download/excel', function (req, res) {
    const conf = {};//创建一个写入格式map,其中cols(表头),rows(每一行的数据);
    const cols = ['编号', '姓名', '密码', '角色'];//手动创建表头中的内容
    conf.cols = [];//在conf中添加cols

    for (var i = 0; i < cols.length; i++) {
        var tits = {};//创建表头数据所对应的类型,其中包括 caption内容 type类型
        tits.caption = cols[i];//添加内容
        tits.type = 'string';//添加对应类型,这类型对应数据库中的类型,入number,data但一般导出的都是转换为string类型的
        conf.cols.push(tits);//将每一个表头加入cols中
    }
    let fields = {
        id: '',
        username: '',
        password: '',
        realname: ''
    }
    //根据需求查询想要的字段
    let sql = "select id,username,password,realname from user"
    let data = connection.connectionMysql(sql);
    let r=[];
    r=data;
    let tows = ['id', 'username', 'password', 'realname'];//创建一个和表头对应且名称与数据库字段对应数据,便于循环取出数据
    let datas = [];//用于承载数据库中的数据
    let towsLen = tows.length
    let dataLen = r.length
    for (let i = 0; i < dataLen; i++) {//循环数据库得到的数据,因为取出的数据格式为
        //[{"id" : "1","username" : "张三","password" : "123456","realname" : "123"},{…………},{…………}]
        let row = [];//用来装载每次得到的数据
        for (let j = 0; j < towsLen; j++) {//内循环取出每个
            row.push(data[i][tows[j]].toString());//row.push((data[i].tows[j]).toString());两种形式都是相同的
        }
        datas.push(row);//将每一个{ }中的数据添加到承载中
    }
    conf.rows = datas;//将所有行加入rows中
    let result = nodeExcel.execute(conf);//将所有数据写入nodeExcel中
    res.setHeader('Content-Type', 'application/vnd.openxmlformats');//设置响应头
    //设置下载文件命名 支持的excel文件类有.xlsx .xls .xlsm .xltx .xltm .xlsb .xlam等
    res.setHeader("Content-Disposition", "attachment; filename=user" + moment(new Date().getTime()).format('YYYYMMDDhhmmss') + ".xlsx");
    res.end(result, 'binary');//将文件内容传入

});

module.exports = router;

html

<button  onclick="downloadExcelOper()">测试下载excel</button>

js

function downloadExcelOper() {
     var url =  "http://localhost:8088/excel/download/excel";
     window.location.href = url;
  }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值