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 dialog open后,服务器端控件失效的快速解决方法
Dec 19 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
Jun 24 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
Aug 01 Javascript
微信小程序(应用号)简单实例应用及实例详解
Sep 26 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
详解如何探测小程序返回到webview页面
May 14 Javascript
vue模块移动组件的实现示例
May 20 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
django 在原有表格添加或删除字段的实例
2018/05/27 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
python判断链表是否有环的实例代码
2020/01/31 Python
python logging模块的使用
2020/09/07 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
工作睡觉检讨书
2014/02/25 职场文书
银行贷款承诺书
2014/03/29 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
聘任书格式及范文
2015/09/21 职场文书
2016入党心得体会范文
2016/01/06 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
Minikube搭建Kubernetes集群
2022/03/31 Servers
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python