vue项目element-ui表格

一、安装依赖 cnpm i file-saver xlsx -S 二、引入依赖 在需要导出Excel的页面(如user.vue)引入file-saver和xlsx: import FileSaver from 'file-saver' import XLSX from 'xlsx' 三、提供用于导出的表格 除了用于展示的表格以外,还要准备一个用于下载的表格(非必须,但是推荐,后面注意事项中会提到这样做的理由)该表格一般不可见,即display: none;,并且为其设置一个id,如id="export-table1",作用是告诉程序将来要导出哪个表格的数据,对应下文exportExcel方法中的document.querySelector('#export-table1')。 ... 导出Excel 四、定义导出方法 exportExcel () { // 导出的内容只做解析,不进行格式转换 let xlsxParam = { raw: true } let wb = null let tableName = '' let randomString = this.randomString(6) wb = XLSX.utils.table_to_book( document.querySelector('#export-table1'), xlsxParam ) // 这里的randomString非必须,只是生成一串随机码 // 便于下载多个文件而不重名 tableName = `用户表-${randomString}.xlsx` /* get binary string as output */ let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }) try { // eslint-disable-next-line no-undef FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), tableName) } catch (e) { if (typeof console !== 'undefined') { console.log(e, wbout) } } this.$message.success('导出成功') return wbout } 代码中的tableName变量就是将来下载的Excel的文件名,为了防止多次下载而重名,所以后面加了一段随机码,下面附上生成随机码的方法: // 生成len位随机码 randomString (len) { len = len || 32 // 屏蔽了容易让人混淆的字符,比如数字1和字母l,,数字0和字母o…… var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678' var maxPos = chars.length var str = '' for (let i = 0; i < len; i++) { str += chars.charAt(Math.floor(Math.random() * maxPos)) } return str } 五、注意事项 用于导出的表格有多少条数据,导出的Excel就有多少条。如果希望导出所有数据,那么该表格就不能设置分页(假设设置每页20条,导出的Excel也只有20条),所以建议额外准备一个隐藏表格专门用于导出Excel; 点击导出按钮执行exportExcel方法,如果发现导出的Excel数据不全或者只有表头,可能是因为点击过快造成数据还未渲染完成,可以在点击事件中设置一定时间的延迟(比如1000毫秒),以确保数据成功渲染; 隐藏表格应保持尽可能的简洁,删掉所有的fixed(设置了列冻结的表格导出后可能会生成多份)、不必要的样式、排序、分组等属性,只确保基本数据能渲染成功即可。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):