前端导出Excel(自定义样式、多级表头、普通导出)

预览请添加图片描述

背景

在做一个后台管理系统,需要做数据导出excel,于是采用了前端进行导出,前端可以根据配置字段进行数据生产excel,然后在浏览器进行下载。

使用插件exceljs

经过多方对比,最终选择用exceljs来做导出excel的工具库,因为开发着非常活跃,在这里选用的是 exceljs,支持nodejs服务端和兼容大多数浏览器导出,读写支持完美,活跃度很高,使用简单。

下载exceljs

npm install exceljs

设置导出表格数据

假设我们需要导出一个这样的表格
在这里插入图片描述
数据

data

	const data = []
  for(let i=0;i<100;i++){
    data.push({
      date: '2016-05-02',
      name: '王五'+i,
      price: 1+i,
      province: '上海',
      admin:"admin",
      sex:i%2?1:0,
      checked:true,
      id:i+1,
      age:0,
      city: '普陀区',
      address: '上海市普上海',
      zip: 200333
    })
  }

column

  const column = [
    { name: 'id', label: 'id', },
    { name: 'name', label: '姓名',},
    { name: 'age', label: '年龄',},
    { name: 'sex', label: '性别',},
    {   name: 'price',  label: '价格', },
    { name: 'admin', label: '账号'},
    { name: 'address', label: '地址', },
    { name: 'date', label: '日期',},
    { name: 'province', label: '省份' },
    { name: 'city', label: '城市' },
    { name: 'zip', label: '邮编' },
  ]

methods

const exportExcelAction = ()=>{
    exportExcel({
      column,
      data,
      filename:input.value||'导出 excel',
      format:format.value,
      autoWidth:true
    })
  }

代码实现

	const ExcelJS = require("exceljs");
	// 创建excel
    const workbook = new ExcelJS.Workbook();
    // 设置信息
    workbook.creator = "Me";
    workbook.title = filename;
    workbook.created = new Date();
    workbook.modified = new Date();
    // 创建工作表
    const worksheet = workbook.addWorksheet(filename);
    // 设置列名
    let columnsName = [];
    column.forEach((item,index)=>{
        let obj = {
            header: item.label, key:item.name, width: null
        }
        if(autoWidth){
            let maxArr = [autoWidthAction(item.label)]
            data.forEach(ite=>{
                let str = ite[item.name] ||''
                if(str){
                    maxArr.push(autoWidthAction(str))
                }
            })
            obj.width = Math.max(...maxArr)+5
        }
        // 设置列名、键和宽度
        columnsName.push(obj);
    })
    worksheet.columns = columnsName;
    // 添加行
    worksheet.addRows(data);
    // 写入文件

    const uint8Array =
        format === "xlsx"
            ? await workbook.xlsx.writeBuffer()
            : await workbook.csv.writeBuffer();

    const blob = new Blob([uint8Array], { type: "application/octet-binary" });
    if (window.navigator.msSaveOrOpenBlob) {
        // msSaveOrOpenBlob方法返回boolean值
        navigator.msSaveBlob(blob, filename + `.${format}`);
        // 本地保存
    } else {
        const link = document.createElement("a"); // a标签下载
        link.href = window.URL.createObjectURL(blob); // href属性指定下载链接
        link.download = filename + `.${format}`; // dowload属性指定文件名
        link.click(); // click()事件触发下载
        window.URL.revokeObjectURL(link.href); // 释放内存
    }

在线预览展示 感兴趣的话可以给个star–》github源码地址

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Vue项目中前端导出具有多级表头表格Excel文件,你可以使用`xlsx`库结合一些操作来实现。下面是一个示例代码: 首先,确保已经安装了`xlsx`库。在项目的根目录下运行以下命令: ``` npm install xlsx ``` 然后,在需要导出Excel文件的组件中,可以按照以下方式编写代码: ```vue <template> <div> <button @click="exportExcel">导出Excel</button> </div> </template> <script> import XLSX from 'xlsx'; export default { methods: { exportExcel() { const headers = [ { text: '姓名', rowspan: 2 }, { text: '信息', colspan: 2 }, { text: '科目', rowspan: 2 }, { text: '成绩', colspan: 3 } ]; const data = [ ['张三', '学生', '数学', '语文', '英语'], [null, null, 90, 80, 85] ]; const mergeCells = [ { s: { r: 0, c: 1 }, e: { r: 0, c: 2 } }, { s: { r: 0, c: 3 }, e: { r: 0, c: 5 } } ]; const ws = XLSX.utils.aoa_to_sheet([headers, ...data]); ws['!merges'] = mergeCells; const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); XLSX.writeFile(wb, 'data.xlsx'); } } } </script> ``` 在上述代码中,我们定义了要导出表格表头`headers`和数据`data`,以及合并单元格的信息`mergeCells`。在`exportExcel`方法中,我们首先将表头和数据合并为一个二维数组,然后使用`XLSX.utils.aoa_to_sheet`方法将其转换为工作表对象`ws`。接着,我们设置合并单元格的信息,并将其赋值给工作表对象的`!merges`属性。最后,创建工作簿对象`wb`,将工作表对象添加到工作簿中,并使用`XLSX.writeFile`方法将工作簿保存为Excel文件。 在用户点击"导出Excel"按钮时,将触发`exportExcel`方法,从而导出具有多级表头表格Excel文件。 请注意,这种方式只能在现代浏览器中使用,并且导出Excel文件将保存在用户的本地文件系统中。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值