一 纯前端实现方式①

如果数据量很小,并且没有什么处理逻辑的话,可以使用该种方式,用到的包是file-saver

<div style="padding-top: 30px;"><el-button type="primary" @click="exportData">导出数据</el-button>
</div><el-table ref="multipleTableData" :data="tableData" :stripe="true"><el-table-column type="selection" min-width="2" :reserve-selection="true" align="center" /><el-table-column :resizable="false" prop="name" label="学生姓名" align="center" /><el-table-column :resizable="false" prop="age" label="年龄"  align="center" /><el-table-column :resizable="false" prop="area" label="地区" align="center" /></el-table>
<script>import fileSaver from 'file-saver'// 导出数据exportData() {const dataArray = this.$refs.multipleTableData.selectionconsole.log(dataArray, 'dataArray')let dataString = `姓名\t年龄\t所在省市\n` // 表头文字for (let i = 0; i < dataArray.length; i++) {for (const key in dataArray[i]) {dataString += `${dataArray[i][key] + '\t'}` // 获取到每一行数据后加上换行符进行拼接}dataString += '\n'}const blob = new Blob([dataString], { type: 'application/vnd.ms-excel' })const time = Date.now() // 给表格名加个时间戳进行区分const filename = '学生信息表' + time + '.xls'fileSaver.saveAs(blob, filename)}
</script>

该方法的核心是将每行数据+'\n'与表头拼接成字符串,然后利用Blob解析,最后利用file-saver包的saveAs方法保存成excel;

Blob表示二进制类型的大对象,可以看做是存放二进制数据的容器,此外,还可以通过Blob设置二进制数据的MIME类型;

var blob = new Blob(dataArr:Array<any>, opt:{type:string});  // 构造Blob函数

dataArray表示一个数组,包含了要添加到Blob对象中的数据,opt表示一个对象,用于设置Blob对象的属性(如:MIME类型)

创建出来的Blob对象包含有两个属性:size和type,size表示数据的大小(以字节为单位),type是MIME类型的字符串;

二 纯前端实现方式②

还是利用Blob实现,采用动态创建a标签的方式

<script>// 导出数据exportData() {const dataArray = this.$refs.multipleTableData.selectionconsole.log(dataArray, 'dataArray')let dataString = `姓名\t年龄\t所在省市\n` // 表头文字for (let i = 0; i < dataArray.length; i++) {for (const key in dataArray[i]) {dataString += `${dataArray[i][key] + '\t'}` // 获取到每一行数据后加上换行符进行拼接}dataString += '\n'}const blob = new Blob([dataString], { type: 'application/vnd.ms-excel' })const time = Date.now() // 给表格名加个时间戳进行区分const filename = '学生信息表' + time + '.xls'const link = document.createElement('a') // 创建a标签link.download = filename // 文件名link.style.display = 'none'link.href = URL.createObjectURL(blob) // 创建URL对象document.body.appendChild(link) // 在body中添加a标签link.click()URL.revokeObjectURL(link.href)  // 主动释放URL对象document.body.removeChild(link) // 移除a标签
}
</script>

其中,URL.createObjectURL()静态方法会创建一个DOMString,其中包含一个表示参数中给定的对象的URL,这个URL的生命周期和创建它的窗口中的document绑定。这个新的URL对象表示指定的File对象或Blob对象,用于指定源object的内容;

在每次调用createObjectURL()方法时,都会创建一个新的URL对象,即使你已经用相同的对象作为参数创建过。当不再需要这些URL对象时,每个对象必须通过调用URL.revokeObjectURL()方法来释放。浏览器在document卸载的时候,会自动释放它们,但是为获得最佳性能和内存使用状况,应该在安全的时机主动释放掉它们。

三 前后端配合

如果导出的数据很多或者数据要进行处理才能导出的话,此时用这种方法较为适合;

方式一:将数据及文件的格式从后端定义好,返回给前端一个链接,前端可以通过点击链接进行导出,使用a标签或者window.loacation.href即可;

window.location.href = 'url' // 或
<a href='url'></a>

但该方式无法携带token传递,对于需要使用身份校验的项目不是很好,除非将token封装在url中进行传递;

方法二:将后端传过来的二进制流文件进行解析,前端模拟出下载动作,进行文件导出;

exportData() {const data = {name: this.tableData.name, // 姓名age: this.tableData.age, // 年龄area: this.tableData.area // 省市}exportDataAPI(data).then(response => {if (response) {const xlsx = 'application/vnd.ms-excel' // 导出格式为xlsx格式,前后端保持一致const blob = new Blob([response], { type: xlsx })const a = document.createElement('a') // 转换完成,创建一个a标签用于下载const time = Date.now()a.download = '学生信息表' + time + '.xlsx'a.href = window.URL.createObjectURL(blob)a.click()a.remove()} else {console.log('导出失败')}}).catch(() => {console.log('失败')})}

其中data为前端传给后端接口的参数

exportDataAPI为封装的get或post请求,在封装时一定要注意将responseType设置为‘blob’,这样导出的文件内容才不会乱码;

 export function exportDataAPI(data) {return axios({// post请求url: '/export',method: 'post',params: data,header: {headers: { 'Content-Type': 'application/x-download' }},responseType: 'blob'})
}
export function exportDataAPI() {// get请求return axios({url: '/export',method: 'get',header: {headers: { 'Content-Type': 'application/x-download' }},responseType: 'blob'})
}

参考链接Vue前端下载Excel文件乱码汇总_带着希望活下去的博客-CSDN博客_vue下载文件流乱码

页面导出excel的三种方式相关推荐

  1. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  2. html表格导出excel有几种方式

    html表格导出excel有几种方式 一. 前后端结合 利用 JavaScript 将表格内容转换为 Excel 文件格式,然后通过 Ajax 请求将文件数据发送给后台,再由后台返回该文件数据流,前端 ...

  3. 详解微信小程序页面间传递信息的三种方式

    详解微信小程序页面间传递信息的三种方式 在开发微信小程序的时候,经常会遇到在页面间传递信息的情况,有三种方法可以实现. 1. 使用数据缓存 将要存储的数据使用以下方法放入缓存 wx.setStorag ...

  4. 导出excel的两种方式

    引言 导出excel就是将后台的数据在数据库中查找出来,然后再将数据存放进excel表格中,这种操作多用于一些统计表中,将table中的数据导出来,存放进excel表格中.(最近在将手机中的短信往电脑 ...

  5. 进入网页页面的开发者模式——三种方式

    1.什么是开发者模式:用来调试HTML,js等web内容的工具,就是开发者工具,我们可以通过开发者工具看到web页面的HTML,JS,以及浏览器的网络请求,CSS样式,内存使用等. 2.进入开发者模式 ...

  6. 将datatable导出为excel的三种方式(转)

    一.使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下: 2 publicstaticboolExportExcel(System.Data.Da ...

  7. java导出excel的两种方式

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...

  8. 详解Springboot下载Excel的三种方式

    https://www.jb51.net/article/216656.htm 汇总一下浏览器下载和代码本地下载实现的3种方式. (其实一般都是在代码生成excel,然后上传到oss,然后传链接给前台 ...

  9. PHP实现页面跳转的三种方式

    PHP实现页面跳转有三种方式,我们一一介绍,推荐使用第一.三方式. 1.借助PHP的header()函数实现. header()函数的主要功能是将HTTP协议标头(header)输出到浏览器. 注意: ...

  10. vue页面跳转的三种方式

    1.a标签跳转 个人理解:这个就属于跳到外部链接,项目里平时很少用 <a href="http://www.baidu.com/"><input type=&qu ...

最新文章

  1. silverlight 跨域文件位置
  2. 最优化5-8章重点(考试点全)
  3. (译)利用ASP.NET加密和解密Web.config中连接字符串
  4. fastlane use_legacy_build_api true
  5. Maven项目配置、检出、运行
  6. 蔡高厅老师 - 高等数学阅读笔记 - 02 - 极限(06 、07、08、09、10、11、12)
  7. centos运行C程序
  8. mysql的gobye_Mysql學習(一)添加一個新的用戶並用golang操作Mysql
  9. ubuntu循环登录问题的解决
  10. Flink 在米哈游的落地实践
  11. 蓝桥杯算法训练超全习题题解——ALGO-3.K好数**
  12. scipy.ndimage.measurements label理解
  13. Gini Index vs Information Entropy
  14. word-spacing
  15. 【react-hook】 useCallback
  16. Unity3D游戏开发最佳实践技巧
  17. QT 文本html显示格式的问题,如在QTextBrowser.setText用tr(),其中为html格式
  18. Scrapy爬虫设置代理ip
  19. 理想职业计算机程序英语作文,理想职业英文作文120词左右,作为演讲用,要求演讲2到3分钟....
  20. 【玩转华为云】手把手教你利用ModelArts实现垃圾自动分类

热门文章

  1. 勤哲excel服务器端口协议,勤哲Excel服务器技术支持|Excel服务器常见问题解答
  2. 嵌入式系统那些事—脚本语言tcl
  3. mac下下载安装mat
  4. IC卡读卡器在安卓(android)下的开发
  5. 《啊哈算法》学习笔记(三)——最短路径
  6. php vue是什么,vue.js是什么软件
  7. u盘启动怎么修复计算机,电脑店u盘启动winpe如何修复系统引导
  8. html合并pdf文件,PDF Mergy:合并PDF
  9. JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
  10. Vivado 2019.1下载与安装