前端表格导出 excel 之 vue+elementUI 篇
2019-12-04 本文已影响0人
一名有马甲线的程序媛
法一:导出一个excel表
实现过程
- 先安装依赖
npm install --save xlsx file-saver
- 在需要的组件内引入
import FileSaver from "file-saver";
import XLSX from "xlsx";
vue:
<template>
<div>
<!-- 导出按钮 -->
<div class="toexcel">
<el-button @click="exportExcel" type="primary">导出</el-button>
</div>
<el-table
class="table"
id="table"
:data="tableData"
border
style="width: 100%">
<el-table-column
prop="date"
label="日期"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
</el-table>
</div>
</template>
js:
<script>
import FileSaver from "file-saver";
import XLSX from "xlsx";
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
};
},
methods: {
// 导出表格所用
exportExcel() {
// .table要导出的是哪一个表格
var wb = XLSX.utils.table_to_book(document.querySelector(".table"));
var wbout = XLSX.write(wb, {
bookType: "xlsx",
bookSST: true,
type: "array"
});
try {
FileSaver.saveAs(
new Blob([wbout], { type: "application/octet-stream" }),
"报表名称"+ ".xlsx"
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, wbout);
}
return wbout;
}
}
};
</script>
法二:导出多级标题多sheet页excel
实现过程
js:
// 创建工作蒲
let workbook = XLSX.utils.book_new();
for (let i = 0; i < 3; i++) {
// 根据table的id创建sheet页,并将sheet添加到工作蒲中
let tableSheet = XLSX.utils.table_to_sheet(document.querySelector('#table'));
// 生成sheet页的名称
XLSX.utils.book_append_sheet(workbook, tableSheet, 'sheet名' + i);
}
// 创建输出对象,excel后缀为xlsx
let wbOut = XLSX.write(wordbook, {
bookType: 'xlsx',
bookSST: true,
type: 'array'
});
try {
// 通过window以流的方式导出工作蒲输出对象
window.saveAs(
new Blob([wbOut], { type: 'application/octet-stream' }), 'excel名.xlsx'
);
} catch (e) {
if (typeof console !== 'undefined') console.log(e, wbOut);
}
},
两种方法都亲测好用~ 需要的就直接拿去吧~ ☺