纯前端实现excel下载功能

  • 借助npm xlsx
// 安装
npm install xlsx --save
// npm xlsx 地址
https://www.npmjs.com/package/xlsx

方式一(获取页面table元素)

import XLSX from "xlsx"
createElsx(){
// 获取表格的dom元素
var elt = document.getElementsByTagName('table')[0];
console.log(elt)
// 将表格的dom 元素转化为 excel工作薄
var wb = XLSX.utils.table_to_book(elt, {sheet:"Sheet JS"});
// 将工作薄导出为excel文件
XLSX.writeFile(wb,'file.xlsx');
}

方式二(将数据转化为数组 进行导出)

import XLSX from "xlsx"
createElsx(){
let arr =[
["序号",'姓名','年纪'],
["0",'1212','15'],
["1",'12313','15'],
]
// 将数组转化为标签页
var ws = XLSX.utils.aoa_to_sheet(arr);
// 创建工作薄
var wb = XLSX.utils.book_new()
// 将标签页插入到工作薄里
XLSX.utils.book_append_sheet(wb,ws)
// 将工作薄导出为excel文件
XLSX.writeFile(wb,'file.xlsx');
}

项目中使用经验:
1、后台管理系统用的antdesign-ui框架,并不能像方式一中直接获取到table元素并生成excel。

  • 可以创建一个table元素对象,分别获取到页面中的thead和tbody 元素,然后进行深拷贝元素插入table对象,在用table对象进行下载。(直接appendChild会导致页面的表格消失,cloneNode拷贝需要传true深拷贝否则只有第一层元素)
createElsx = () => {
    var tabs = document.getElementsByClassName('ant-tabs-tabpane-active')[0];
    var tbody = tabs.getElementsByClassName('ant-table-tbody')[0].cloneNode(true);
    var thead = tabs.getElementsByClassName('ant-table-thead')[0].cloneNode(true);
    var table = document.createElement("table");
    table.appendChild(thead);
    table.appendChild(tbody);
    // 将表格的dom 元素转化为 excel工作薄
    var wb = XLSX.utils.table_to_book(table, { raw: true });// 解决%消失的问题
    var excelFileName = `${currentName}负载率`;
    // 将工作薄导出为excel文件
    XLSX.writeFile(wb,`${excelFileName}.xlsx`);
    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值