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 相关文章推荐
在js中单选框和复选框获取值的方式
Nov 06 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
通过JS获取Request.QueryString()参数的值实现方法
Sep 27 Javascript
详解如何在vue项目中使用lodop打印插件
Sep 27 Javascript
js array数组对象操作方法汇总
Mar 18 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
JavaScript代码实现简单计算器
Dec 27 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多线程下载远程多个文件
2013/06/25 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
php 基础函数
2017/02/10 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
js计算页面刷新的次数
2009/07/20 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vuex存值与取值的实例
2019/11/06 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
django和flask哪个值得研究学习
2020/07/31 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
升职自荐书范文
2013/11/28 职场文书
保险公司年会主持词
2014/03/22 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
创业计划书之美容店
2019/09/16 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
python blinker 信号库
2022/05/04 Python