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 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
js动画(animate)简单引擎代码示例
Dec 04 Javascript
JavaScript网页定位详解
Jan 13 Javascript
javascript常用方法汇总
Dec 02 Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
jquery实现简单自动轮播图效果
Jul 29 jQuery
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
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程序之die调试法 快速解决错误
2009/09/17 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
Python函数学习笔记
2008/10/07 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python实现移动木板小游戏
2020/10/09 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
T3官网:头发造型工具
2019/12/26 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
数控技校生自我鉴定
2014/03/02 职场文书
家长写给老师的建议书
2014/03/13 职场文书
公证委托书格式
2014/09/13 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python