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 相关文章推荐
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
判断在css加载完毕后执行后续代码示例
Sep 03 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
JavaScript Array对象详解
Mar 01 Javascript
JS判断日期格式是否合法的简单实例
Jul 11 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
Vue.js的动态组件模板的实现
Nov 26 Javascript
使用JavaScript保存文本文件到本地的两种方法
Jan 22 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+mysql保存和输出文件
2006/10/09 PHP
PHP 采集心得技巧
2009/05/15 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
java解析json方法总结
2019/05/16 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
Python实现约瑟夫环问题的方法
2016/05/03 Python
详解Python多线程
2016/11/14 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
网络教育毕业生自我鉴定
2013/10/10 职场文书
教师工作失职检讨书
2014/09/18 职场文书
交通违章检讨书
2014/09/21 职场文书
学生检讨书范文
2014/10/30 职场文书
银行给客户的感谢信
2015/01/23 职场文书
经费申请报告
2015/05/15 职场文书
迎新生晚会主持词
2015/06/30 职场文书
篮球赛新闻稿
2015/07/17 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js