问题描述:
最近在公司项目中需要使用导出el-table中所选中的项,之前没有接触过此方面的内容,所以感觉无从下手,搜索资料后发现了解决方案,现将解决方案记录下来,方便下次使用
实现效果
解决方案:
1.安装插件:
npm install file-saver --save
npm install xlsx --save
npm install script-loader -D
前两个插件详细地址:
https://github.com/SheetJS/sheetjs.
https://github.com/eligrey/FileSaver.js.
2.在src文件夹下新建excel文件夹,用于存放Blob.js 和 Export2Excel.js
3.导入FileSaver和XLSX,如果使用该功能的地方较多,可以在main.js中导入,否则可以在特定的组件中导入
import FileSaver from "file-saver";
import XLSX from "xlsx";
4.在项目中使用
<el-button @click="exportTable">导出</el-button>
exportTable() {
this.$confirm("确定下载列表文件?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.excelData = this.multipleSelection; // 你要导出的数据list。
this.export2Excel();
})
.catch(() => {});
},
export2Excel() {
var that = this;
require.ensure([], () => {
const { export_json_to_excel } = require("../excel/Export2Excel.js"); // js文件的位置
const tHeader = [
"员工编号",
"员工姓名",
"性别",
"民族",
"身份证号",
"党组织关系",
"入司日期",
"党员类型",
"状态",
];
const filterVal = [
"id",
"name",
"male",
"nation",
"identityNumber",
"dzzgxgszb",
"rsDate",
"memberType",
"deleteFlag",
]; // 导出的表头字段名,需要导出表格字段名
const list = that.filterTableDate(JSON.parse(JSON.stringify(that.multipleSelection)));
const data = that.formatJson(filterVal, list);
export_json_to_excel(tHeader, data, "党员信息表"); // 导出的表格名称,根据需要自己命名
});
},
formatJson(filterVal, jsonData) {
return jsonData.map((v) => filterVal.map((j) => v[j]));
},
//对后台返回数据数据进行格式化处理
filterTableDate(data){
data.forEach(item=>{
if(item.gender===1){
item.gender="男"
}else if(item.gender===2){
item.gender="女"
}
if(item.memberType===1){
item.gender="中共党员"
}else if(item.memberType===2){
item.gender="中共预备党员"
}
if(item.deleteFlag===3){
item.gender="在职"
}else if(item.deleteFlag===0){
item.gender="离职"
}
item.enterCompanyDate=this.formatTime(item.enterCompanyDate)
});
return data;
},
formatTime(date){
if (date!==null) {
let d=new Date(parseInt(date));
return (
[d.getFullYear(),d.getMonth()+1,d.getDate()]
.map(d=>9?d:"0"+d)
.splice(0,3)
.join("-")
)
}else{
return "--"
}
}
然后选择table表格中的某些项,点击导出按钮就可以导出了