使用vue导出excel遇到的坑及解决
作者:前端陈晨
这篇文章主要介绍了使用vue导出excel遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
vue导出excel遇到的坑
需求
Vue+element UI el-table下的导出当前所有数据到一个excel文件里。
先按照网上的方法,看看有哪些坑
准备工作
1、安装依赖:yarn add xlsx file-saver -S
2、在放置需要导出功能的组件中引入
import FileSaver from "file-saver"; import XLSX from "xlsx";
3、HTML中的设置,简单来说就是给需要导出的table标签el-table上加一个id:如outTable,对应下面的exportExcel方法中的 document.querySelector(‘#outTable‘)
   //导出当前表格 exportCurrent:function(){ var wb = XLSX.utils.table_to_book(document.querySelector('#outTable')) //表格id var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }) try { FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'sheet.xlsx') //文件名 } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) } return wbout },
我们来看一下原始数据
接下来再来看一下导出的结果
哎???我订单编号跟银行卡号咋成了科学计数法了??
还有我的时间,时分秒呢??
原因是因为数字太长了,需要使用excel的文本格式才能显示正常
经过各种搜索,最终解决方法如下:
exportExcel() { var xlsxParam = { raw: true };//转换成excel时,使用原始的格式 var wb = XLSX.utils.table_to_book(document.querySelector("#outTable"),xlsxParam); var wbout = XLSX.write(wb, { bookType: "xlsx", bookSST: true, type: "array" }); try { FileSaver.saveAs( new Blob([wbout], { type: "application/octet-stream;charset=utf-8" }), "sheetjs.xlsx" ); } catch (e) { if (typeof console !== "undefined") console.log(e, wbout); } return wbout; },
再来看我们的数据
大功告成。
vue导出excel表报错处理
Excel表导出功能需要将请求中的 responseType 设置为 blob,也就是说请求只能接收Excel文件,json数据没法处理
此时可以根据 Response 的 Content-Type值类判断处理,如果值 为 application/json,则先将返回的数据转换成字符串,然后再转换为 JSON
// 导出 downLoad(){ const fileReader = new FileReader() // 第一步创建文件对象 const loading = this.$loading({ lock: true, text: '导出加载中···', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }); const data = { equipmentName: this.searchForm.equipmentName, equipmentCode: this.searchForm.equipmentCode, }; download('/api/mfg-mes/equipmentVersion/exportStandardWorkTime', data).then(res => { fileReader.onloadend = () => { // 定义方法 if (res.type === 'application/json') { // 第三步进行判断 const jsonData = JSON.parse(fileReader.result) // 说明是普通对象数据,后台转换失败 // 后台信息 // console.log(jsonData,'fileReader') this.$message.error(jsonData.msg) loading.close(); }else{ downloadFile(res, '信息表', 'xlsx') loading.close(); } } fileReader.readAsText(res) }).catch(err => { console.log(err); }) },
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。