Vue实现导出excel表格功能


Posted in Javascript onMarch 30, 2018

引言:

最近使用vue在做一个后台系统,技术栈 vue + iView ,在页面中生成表格后, iView可以实现表格的导出,不过只能导出csv格式的,并不适合项目需求。

如果想要导出Excel

  • 在src目录下创建一个文件(vendor)进入 Blob.js 和 Export2Excel.js
  • npm install -S file-saver 用来生成文件的web应用程序
  • npm install -S xlsx 电子表格格式的解析器
  • npm install -D script-loader 将js挂在在全局下

表结构

渲染页面中的表结构是由 columns 列 和 tableData 行,来渲染的 columns 为表头数据 tableData 为表实体内容

columns1: [
   {
   title: '序号',
   key: 'serNum'
   },
   {
   title: '选择',
   key: 'choose',
   align: 'center',
   render: (h, params) => {
    if (params.row.status !== '1' && params.row.status !== '2') {
    return h('div', [
     h('checkbox', {
     props: {
      type: 'selection'
     },
     on: {
      'input': (val) => {
      console.log(val)
      }
     }
     })
    ])
    } else {
    return h('span', {
     style: {
     color: '#587dde',
     cursor: 'pointer'
     },
     on: {
     click: () => {
      // this.$router.push({name: '', query: { id: params.row.id }})
     }
     }
    }, '查看订单')
    }
   }
   },
   ...
  ],

tableData 就不写了,具体数据结构查看iViewAPI

在build 目录下 webpack.base.conf.js 配置 我们要加载时的路径

alias: {
  'src': path.resolve(__dirname, '../src'),
 }

在当前页面中引入依赖

require('script-loader!file-saver')
 // 转二进制用
 require('script-loader!src/vendor/Blob')
 // xlsx核心
 require('script-loader!xlsx/dist/xlsx.core.min')

当我们要导出表格执行 @click 事件调用 handleDownload 函数

handleDownload() {
  this.downloadLoading = true
  require.ensure([], () => {
   const {export_json_to_excel} = require('src/vendor/Export2Excel')
   const tHeader = Util.cutValue(this.columns1, 'title')
   const filterVal = Util.cutValue(this.columns1, 'key')
   const list = this.tableData1
   const data = this.formatJson(filterVal, list)
   export_json_to_excel(tHeader, data, '列表excel')
   this.downloadLoading = false
  })
  },
  formatJson(filterVal, jsonData) {
  return jsonData.map(v => filterVal.map(j => v[j]))
  }

Util.cutValue 是公共方法,目的是为了将,tHeader 和filterVal 的值转成数组从而生成表格

### Util module
// 截取value值
utils.cutValue = function (target, name) {
 let arr = []
 for (let i = 0; i < target.length; i++) {
 arr.push(target[i][name])
 }
 return arr
}

Export2Excel.js/Blob.js 的代码

下面再看下vue中excel表格的导入和导出

注意:vue中要实现表格的导入与导出,首先要install两个依赖,

npm install -S file-saver xlsx  和  npm install -D script-loader。其次,在项目src目录下新建一个文件夹vendor(名字随意),在此文件夹下放置两个文件Blob.js和Export2Excal.js(下载地址:http://files.cnblogs.com/files/wangyunhui/vendor.rar)。之后就可以愉快的导入导出了微笑。

1、导入

1.<input id="upload" type="file" @change="importfxx(this)" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" /> 

importfxx(obj) { 
let _this = this; 
console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxx1"); 
let inputDOM = this.$refs.inputer; 
// 通过DOM取文件数据 
this.file = event.currentTarget.files[0]; 
var rABS = false; //是否将文件读取为二进制字符串 
var f = this.file; 
var reader = new FileReader(); 
//if (!FileReader.prototype.readAsBinaryString) { 
FileReader.prototype.readAsBinaryString = function(f) { 
var binary = ""; 
var rABS = false; //是否将文件读取为二进制字符串 
var pt = this; 
var wb; //读取完成的数据 
var outdata; 
var reader = new FileReader(); 
reader.onload = function(e) { 
var bytes = new Uint8Array(reader.result); 
var length = bytes.byteLength; 
for(var i = 0; i < length; i++) { 
binary += String.fromCharCode(bytes[i]); 
} 
var XLSX = require('xlsx'); 
if(rABS) { 
wb = XLSX.read(btoa(fixdata(binary)), { //手动转化 
type: 'base64' 
}); 
} else { 
wb = XLSX.read(binary, { 
type: 'binary' 
}); 
} 
outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);//outdata就是你想要的东西 
} 
reader.readAsArrayBuffer(f); 
} 
if(rABS) { 
reader.readAsArrayBuffer(f); 
} else { 
reader.readAsBinaryString(f); 
} 
}

2.导出

inportexcel: function() { //兼容ie10哦! 
require.ensure([], () => {


 
const { export_json_to_excel } = require('../../vendor/Export2Excel');
//引入文件


 
const tHeader = ['用户名', '姓名', '部门', '职位', '邮箱', '充值']; //将对应的属性名转换成中文 
// const tHeader = []; 




 
const filterVal = ['userName', 'realName', 'department', 'position', 'email', 'money'];//table表格中对应的属性名

  
  
const list = this.sels;



 
const data = this.formatJson(filterVal, list);



 
export_json_to_excel(tHeader, data, '列表excel');


 
}) 
}

总结

以上所述是小编给大家介绍的Vue实现导出excel表格功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery实现弹出div,始终显示在屏幕正中间的简单实例
Mar 08 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
Jul 09 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
EasyUI创建对话框的两种方式
Aug 23 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
vue项目打包后怎样优雅的解决跨域
May 26 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 13 Javascript
理解 JavaScript EventEmitter
Mar 29 #Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 #Javascript
vue的diff算法知识点总结
Mar 29 #Javascript
vue文件树组件使用详解
Mar 29 #Javascript
vue全局组件与局部组件使用方法详解
Mar 29 #Javascript
javascript实现文件拖拽事件
Mar 29 #Javascript
vue 父组件调用子组件方法及事件
Mar 29 #Javascript
You might like
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
Python之web模板应用
2017/12/26 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
高二化学教学反思
2014/01/30 职场文书
自立自强的名人事例
2014/02/10 职场文书
投资协议书范本
2014/04/21 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
幼师中班个人总结
2015/02/12 职场文书
入团介绍人意见范文
2015/06/04 职场文书
财务管理制度范本
2015/08/04 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js