前端
await this.$vaHttp.post(manageApi.exportExcel, this.form, {responseType: 'blob'}).then(({data}) => {
const blob = new Blob([data])
const fileName = `test.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)
document.body.removeChild(elink)
// for IE
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, fileName)
}
})
后端
public R exportExcel(QcQualityTaskQuery taskQuery, HttpServletResponse response) {
try (SXSSFWorkbook workbook = new SXSSFWorkbook(1000)) {
// 设置内存中的最大行数,超过的部分将被写入磁盘
List<Map<String, Object>> exportTables = taskQuery.getExportTables();
for (Map<String, Object> exportTable : exportTables) {
Sheet sheet = workbook.createSheet(exportTable.get("sheetName").toString());
List<?> columns = (List<?>) exportTable.get("columns");
setSheetHeader(sheet, columns);
System.out.println();
}
response.setHeader("Content-Disposition",
"attachment;filename*=UTF-8'zh_cn'" + URLEncoder.encode("test.xlsx", "UTF-8"));
response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.flushBuffer();
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
}
return R.ok();
}