封装导出Excel文件
utils/exportexcel.js
import { parseTime } from '@/utils/format';
import { Message } from 'element-ui';
/**
* 导出Excel文件
* @param {*} data 文件数据流
* @param {String} filePrefix 文件前缀名
* @param {String} fileSuffix 文件后缀名
*/
export function exportExcel(data, filePrefix, fileSuffix) {
// 判断文件前缀名是否存在,不存在默认'EXPORTEXCEL'
filePrefix = filePrefix ?? 'EXPORTEXCEL';
// 判断文件后缀名是否存在,不存在默认'.xls'
fileSuffix = fileSuffix ?? '.xls';
// 处理文件数据流
const contentByExportExcel = data;
const blobByExportExcel = new Blob([contentByExportExcel], { type: 'application/vnd.ms-excel;charset=utf-8' });
// 组装文件名称
const filenameByExportExcel = `${filePrefix}_${parseTime(
new Date(),
'{y}-{m}-{d}'
)}_${new Date().getTime()}${fileSuffix}`;
// 执行文件下载操作
if ('download' in document.createElement('a')) {
const elink = document.createElement('a');
elink.download = filenameByExportExcel;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blobByExportExcel);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);
Message({
message: '导出Excel成功!',
type: 'success',
showClose: true,
center: true
});
} else {
navigator.msSaveBlob(blobByExportExcel, filenameByExportExcel);
Message({
message: '导出Excel成功!',
type: 'success',
showClose: true,
center: true
});
}
}
引入:
import { exportExcel } from '@/utils/exportexcel';
使用:
// 排除不需要的属性
let { pageNum, pageSize, ...otherObj } = { ...this.queryParams };
// 发送导出请求
exportAttendanceReport({ ...otherObj })
.then((response) => {
exportExcel(response, '统计表格', '.xlsx');
})
.catch(() => {
this.$message.error('导出异常!');
});
需要注意的点,数据的响应类型(responseType: 'blob'),数据大概如下:

希望大佬看到有不对的地方,提出博主予以改正!

浙公网安备 33010602011771号