方法1(前端自行获取数据导出Excel)
<el-button
type="success"
icon="el-icon-download"
size="mini"
@click="exportExcel('tab', '导出事件表格')"
>导出</el-button>
<el-table v-show="false" :data="tableData" id="tab">
...
</el-table>
async exportExcel (id, name) {
let page = this.queryParams.pageNum
let pgSize = this.queryParams.pageSize
this.queryParams.pageNum = 1
this.queryParams.pageSize = this.total
let res = await listEvt(this.queryParams)
this.tableData = res.rows
this.$nextTick(() => {
var xlsxParam = { raw: true }
var wb = XLSX.utils.table_to_book(
document.querySelector('#' + id),
xlsxParam
)
var wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: true,
type: 'array'
})
try {
FileSaver.saveAs(
new Blob([wbout], {
type: 'application/octet-stream'
}),
name + '.xlsx'
)
} catch (e) {
if (typeof console !== 'undefined') console.log(e, wbout)
}
this.queryParams.pageNum = page
this.queryParams.pageSize = pgSize
return wbout
})
},
方法2(后端接口导出Excel)
export function exportUser(query) {
return request({
url: '/system/user/export',
method: 'post',
data: query,
responseType: 'blob',
})
}
<el-button
type="success"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
/** 导出按钮操作 */
handleExport() {
let queryParams = Object.assign({}, this.queryParams)
queryParams.pageSize = 99999999
this.$confirm('是否确认导出所有用户数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(function () {
return exportUser(queryParams)
})
.then((res) => {
const blob = new Blob([res], {type: "application/json"});
const fileName = '导出村居.xlsx';
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
}).catch(err => {
console.log(err);
})
},