简介

js导出excel,(数据不分页的情况下,即前端能拿到全部数据才能导出全部数据),原文链接https://blog.csdn.net/weixin_46705618/article/details/107377103

1.安装依赖包

1
2
3
npm  install  -S file-saver
npm install -S xlsx
npm install -D script-loader

2.把两个js文件放到项目里 Blob.js、Export2Excel.js

地址(私有库):https://gitee.com/lishichang/common/tree/master/Export2Excel

3.main.js中引入

1
2
import Blob from './Excel/Blob.js'
import Export2Excel from './Excel/Export2Excel.js'

4.vue组件(element-ui的按钮)

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<template>
<!-- v-bind="excelData" // 父组件传给此组件的数据
excelData: {
title: "", // 标题
filterField: [], // 字段['name','age']
tHeader: [], // 表头['姓名','年龄']
list: [] // 数据[{name:'1',age:18},{name:'2',age:19}]
} -->
<el-button class="public-btn" @click="export2Excel">{{btnText}}</el-button>
</template>
<script type="text/javascript">
export default {
name: 'ExportExcel',
props:{
title:{
type:String,
default:'' // 文件名称
},
filterField:{
type:Array,
default:()=>[] // 字段 [name,age]
},
tHeader:{
type:Array,
default:()=>[] // 表格顶部名称 [名称,性别]
},
list:{
type:Array,
default:()=>[] // 数据 [{name:'张三',age:16}]
},
btnText:{
type:String,
default:'导出Excel' // 按钮名称 默认为导出excel
}
},
computed:{
listData(){
return (this.btnText).indexOf('导出')>-1?this.list:[];
}
},
methods: {
formatJson(filterField, jsonData) {
return jsonData.map(function(dataObj) {
return filterField.map(function(field) {
let fieldObj = dataObj[field];
if (!fieldObj) {
fieldObj = "-";
}
return fieldObj;
});
});
},
export2Excel() {
require.ensure([], () => {
let { export_json_to_excel } = require("@/Excel/Export2Excel");
let data = this.formatJson(this.filterField, this.listData);
let title = this.btnText=='导出excel'?this.title:this.title+'';
export_json_to_excel(this.tHeader, data, title);
});
}
}
};
</script>

5.使用组件

1
<export-excel v-bind="excelData"></export-excel>