vue中导出Excel表格的实现代码


Posted in Javascript onOctober 18, 2018

项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地。当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待。

1、首先我们需要安装3个依赖,file-saver、xlsx和script-loader。

使用npm安装:

npm install file-saver xlsx -S
npm install script-loader -D

使用yarn安装:

yarn add file-saver xlsx -S
yarn add script-loader -D

2、在/src目录下新建一个vendor(名字也可自取)文件夹,存入Blob.js和Export2Excel.js文件。
Blob.js和Export2Excel.js文件地址:https://github.com/han6054/export-excel

当然也可以自行下载,或许会有版本的问题吧。

3、在/build/webpack.base.conf.js中新增一行代码(vendor的名字必须和第二步新建的文件夹名字相同)。

resolve: {
 extensions: ['.js', '.vue', '.json'],
 alias: {
  'vue$': 'vue/dist/vue.esm.js',
  '@': resolve('src'),
  'vendor': path.resolve(__dirname, '../src/vendor') // 新增这一行
 }
}

4、在vue项目中的使用。

/**
 * excel导出
 */
exportTable () {
 // this.DefaultData.exportExcelMax限制一下导出的总条数
 if (this.totals <= this.DefaultData.exportExcelMax) {
  this.$confirm('确定要导出当前<strong>' + this.totals + '</strong>条数据?', '提示', {
   dangerouslyUseHTMLString: true,
   confirmButtonText: '确定',
   cancelButtonText: '取消'
  }).then(() => {
   this.getExpportData()
  }).catch(() => {
  })
 } else {
  this.$confirm('当前要导出的<strong>' + this.totals + '</strong>条数据,数据量过大,不能一次导出!<br/>建议分时间段导出所需数据。', '提示', {
   dangerouslyUseHTMLString: true,
   showCancelButton: false
  }).then(() => {
  }).catch(() => {
  })
 }
},

/**
 * 对导出数据格式处理
 */
formatJson (filterVal, jsonData) {
 return jsonData.map(v => filterVal.map(j => v[j]))
},

/**
 * 导出的列表数据
 */
getExpportData: function () {
 const loading = this.$loading({
  lock: true,
  text: '正在导出,请稍等......',
  spinner: 'el-icon-loading',
  background: 'rgba(0, 0, 0, 0.7)'
 })
 const data = {
  phoneNo: this.formInline.phoneNo,
  userName: this.formInline.userName,
  amount: this.formInline.amount,
  fee: this.formInline.fee,
  currentPage: this.currentPage,
  pageSize: this.DefaultData.exportExcelMax
 }
 // 这里封装了axios,根据自身情况修改即可
 this.http(
  this.ApiSetting.orderExport,
  data
 ).then((res) => {
  // handleDataList这里可以对导出的数据根据需求做下处理
  const handleDataList = res.data.list
  for (let i in res.data.list) {
   handleDataList[i].amount = res.data.list[i].amount * 100
   handleDataList[i].fee = res.data.list[i].fee + '%'
  }
  if (res.data.list.length > 0) {
   require.ensure([], () => {
    /* eslint-disable */
    // 这里的径路要修改正确
    const { export_json_to_excel } = require('../../vendor/Export2Excel')
    /* eslint-enable */
    // 导出的表头
    const tHeader = ['手机号码', '用户姓名', '交易金额', '手续费']
    // 导出表头要对应的数据
    const filterVal = ['phoneNo', 'userName', 'amount', 'fee']
    // 如果对导出的数据没有可处理的需求,把下面的handleDataList换成res.data.list即可,删掉上面相应的代码
    const data = this.formatJson(filterVal, handleDataList)
    // this.DefaultData.formatLongDate.getNow()自己写的一个获取当前时间,方便查找导出后的文件。根据需求自行可处理。
    export_json_to_excel(tHeader, data, '订单查询列表-' + this.DefaultData.formatLongDate.getNow())
    this.$message({
     message: '导出成功',
     duration: 2000,
     type: 'success'
    })
   })
  } else {
   this.$message({
    message: '数据出?,请联系管理员',
    duration: 2000,
    type: 'warning'
   })
  }
  loading.close()
 }, error => {
  console.log(error)
  loading.close()
 })
}

在需要导出功能的页面加入上面三个方法,修改好需要注意的事项,导出Excel表格就ok了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery入门第一课 jQuery选择符
Mar 14 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
window.requestAnimationFrame是什么意思,怎么用
Jan 13 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
JS实现文件动态顺序载入的方法
Mar 07 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
整理关于Bootstrap过渡动画的慕课笔记
Mar 29 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 #Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 #Javascript
使用JS获取页面上的所有标签
Oct 18 #Javascript
深入理解 Koa 框架中间件原理
Oct 18 #Javascript
JS实现十分钟倒计时代码实例
Oct 18 #Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 #Javascript
JavaScript的词法结构精华篇
Oct 17 #Javascript
You might like
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
Python正则表达式分组概念与用法详解
2017/06/24 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
python调用支付宝支付接口流程
2019/08/15 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
为什么说python更适合树莓派编程
2020/07/20 Python
python3 kubernetes api的使用示例
2021/01/12 Python
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
红旗方阵解说词
2014/02/12 职场文书
生物学专业求职信
2014/07/23 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
诚信高考倡议书
2019/06/24 职场文书
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫