首页 > web前端 > js教程 > vue + iView导出excel表格

vue + iView导出excel表格

php中世界最好的语言
发布: 2018-06-12 14:07:57
原创
8790 人浏览过

这次给大家带来vue + iView导出excel表格,vue + iView导出excel表格的注意事项有哪些,下面就是实战案例,一起来看一下。

引言:

最近使用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 为表实体内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

columns1: [

   {

   title: '序号',

   key: 'serNum'

   },

   {

   title: '选择',

   key: 'choose',

   align: 'center',

   render: (h, params) => {

    if (params.row.status !== '1' && params.row.status !== '2') {

    return h('p', [

     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 配置 我们要加载时的路径

1

2

3

alias: {

  'src': path.resolve(__dirname, '../src'),

 }

登录后复制

在当前页面中引入依赖

1

2

3

4

5

require('script-loader!file-saver')

 // 转二进制用

 require('script-loader!src/vendor/Blob')

 // xlsx核心

 require('script-loader!xlsx/dist/xlsx.core.min')

登录后复制

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 的值转成数组从而生成表格

1

2

3

4

5

6

7

8

9

### 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

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(&#39;xlsx&#39;);

if(rABS) {

wb = XLSX.read(btoa(fixdata(binary)), { //手动转化

type: &#39;base64&#39;

});

} else {

wb = XLSX.read(binary, {

type: &#39;binary&#39;

});

}

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.导出

1

2

3

4

5

6

7

8

9

10

11

12

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');       

}) 

}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Postman+token传参的使用

如何使用angular4共享组件通信

以上是vue + iView导出excel表格的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板