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中的对象和数组的应用技巧
Jan 07 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
vue2实现provide inject传递响应式
May 21 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
Destoon模板制作简明教程
2014/06/20 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jQuery的学习步骤
2011/02/23 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jstree的简单实例
2016/12/01 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python 搜索大文件的实例代码
2019/07/08 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
浪费资源的建议书
2014/03/12 职场文书
贷款委托书怎么写
2014/08/02 职场文书
忠诚教育心得体会
2014/09/03 职场文书
作文评语集锦
2014/12/25 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP