java部分
java"> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.31</version></dependency>
java"> @Overridepublic void exportList(Long appId, String keywords, String status, HttpServletRequest request, HttpServletResponse response) {List<QuestionInstruct> list = getList(appId, keywords, status);// 设置响应头response.setHeader("Content-Disposition", "attachment; filename=export.xlsx");response.setHeader("Content-Type", "application/octet-stream");try (ExcelWriter writer = ExcelUtil.getWriter(true); ServletOutputStream out = response.getOutputStream()) {writer.addHeaderAlias("question", "问题");writer.addHeaderAlias("answer", "答案");writer.addHeaderAlias("statusName", "状态");writer.setOnlyAlias(true);// 设置列宽writer.setColumnWidth(0, 60);writer.setColumnWidth(1, 60);writer.setColumnWidth(2, 20);// 设置行高writer.getSheet().setDefaultRowHeightInPoints(30); // 设置默认行高为20点writer.write(list, true);writer.flush(out, true);response.setStatus(HttpServletResponse.SC_OK);} catch (Exception e) {e.printStackTrace();response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);}}
vue部分,是自己封装的js
javascript">async function exportExcel(url, data, fileName = 'exported_excel.xlsx', config = {}) {const axiosConfig = {...config,responseType: 'blob'};const res = await get(url, data, axiosConfig);if (res.size>0) {const blob = new Blob([res], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});const urlObj = window.URL.createObjectURL(blob);const link = document.createElement('a');link.href = urlObj;link.setAttribute('download', fileName);document.body.appendChild(link);link.click();document.body.removeChild(link);window.URL.revokeObjectURL(urlObj);}}
在封装get请求的时候,一定要注意一个地方,要不会把返回的数据当成json解析,前台会报错,但是依然可以使用
javascript"> <n-button strong secondary type="info" :loading="loading" @click="exportExcel" ><jb-icon v-if="!loading" :local="true" icon="ant-design:download-outlined" height="20"></jb-icon> 导出问答的调教列表</n-button>// 导出excel
const exportExcel = async () => {loading.value = true;await JBoltApi.exportExcel("/questionInstruct/exportList", pageConditions, '问答调教列表.xlsx').then((res) => {loading.value = false;});};