前端导出excel有三种方式:1.通过纯前端导出excel,2.通过调取接口导出excel,就是后端做导出功能,这种的话一般就是后端返回给你的数据形式是blob或者是arrybuffter这种方式,3.三种就是后端给你一个导出的地址,前端通过window.location.href导出
1.通过纯前端导出excel
1.安装插件
npm install js-xlsx file-saver -S
npm install script-loader -S -D //它帮我们挂载了,不需要引入到main.js里面
2、在src下创建一个文件夹vendor,并且引入Export2Excel.js
此处附上我项目中vendor的链接,直接拷过去就好:
vendor文件拷贝链接
3.html
:data="tableData" border style="width: 100%"> prop="date" label="日期" width="180"> prop="name" label="姓名" width="180"> prop="address" label="地址">
export default{
data(){
return{
tableData: [{
id: 1,
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
id: 2,
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
id: 3,
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
id: 4,
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}],
}
},
methods:{
onexcel() {
// this.downloadLoading = true;
import("@/vendor/Export2Excel").then(excel => {
const tHeader = ["id", "date", "name", "address",];//要导出后表头是什么,可以跟tableDate中的表头不一致
const filterVal = [
"id",
"date",
"name",
"address"
];
const data = this.formatJson(filterVal, this. tableData)
// const data = this.tableData;这里可以通过获取表格中的数据的接口获取
excel.export_json_to_excel({
header: tHeader,
data,
filename: "table-list" //导出文件的名,自定义就好
});
// this.downloadLoading = false;
});
},
//下载方法中,需要用到的格式化json的方法
formatJson(filterVal, jsonData) {
return jsonData.map(v =>
filterVal.map(j => {
if (j === "id") { //此处如没有要格式化的列,可以不用此判断
// return parseTime(v[j])
return v[j];
} else {
return v[j];
}
})
);
},
}
}
2.通过调取接口导出excel,
例如:
onexcel(){
let data = {
carNo, //物资/车牌号
provider, //项目
name, // 供货商
mzTimeBegin: inTimes ? inTimes[0] : "",
mzTimeEnd: inTimes ? inTimes[1] : "",
};
WeighbridgeExcelList(data).then((res)=>{// WeighbridgeExcelList是封装的api接口
const aLink = document.createElement("a");
let blob = new Blob([res], { type: "application/vnd.ms-excel" });
aLink.href = URL.createObjectURL(blob);
aLink.setAttribute('download', '地磅记录.xlsx');
aLink.click();
document.body.appendChild(aLink);
// this.$refs.loadElement.appendChild(aLink)
}) .catch((err) => {
this.$message.warning(err);
})
}
3.三种就是后端给你一个导出的地址
例如:
onexcel(){’
this.$axios.get("接口地址",{params:{
参数1: data ...
}}).then(res => {
if(res.request.status === 200) {
// 导出
location.href = res.request.responseURL;
// window.open(res.request.responseURL);
this.$message({message: '导出成功', type: 'success'});
}
}).catch( err => {
this.$message.error('导出失败');
})
————————————————
版权声明:本文为CSDN博主「阳光的男夹克」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44640323/article/details/108756402
}