后端
1.导入poi包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.0.1</version> </dependency>
2.实现向前端导出文件流
@RequestMapping(value = "export", method = RequestMethod.GET) public void export(HttpServletResponse response) { //获取所有 List<MicData> micData = dataService.findAllExcept(); try (HSSFWorkbook wb = new HSSFWorkbook()) { writeChargeSheet(micData, wb); response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment; filename=" + "data.xls"); try { wb.write(response.getOutputStream()); response.getOutputStream().flush(); } catch (IOException ex) { ex.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); throw new IllegalArgumentException("请从新导出"); } } private void writeChargeSheet(List<MicData> micDataList, HSSFWorkbook wb) { Sheet sheet = wb.createSheet("麦克风记录数据"); writeHeadCell(sheet.createRow(0), "线号", "创立工夫", "测试人员", "测试次数", "杆号", "1号麦克风Max","1号麦克风Min","2号麦克风Max","2号麦克风Min", "3号麦克风Max","3号麦克风Min","4号麦克风Max","4号麦克风Min","5号麦克风Max","5号麦克风Min","6号麦克风Max","6号麦克风Min","7号麦克风Max","7号麦克风Min", "8号麦克风Max","8号麦克风Min","9号麦克风Max","9号麦克风Min"); sheet.setColumnWidth(0, 10 * 256); sheet.setColumnWidth(1, 19 * 256); sheet.setColumnWidth(2, 13 * 256); sheet.setColumnWidth(4, 13 * 256); sheet.setColumnWidth(5, 10 * 256); sheet.setColumnWidth(6, 8 * 256); sheet.setColumnWidth(8, 8 * 256); sheet.setColumnWidth(9, 8 * 256); sheet.setColumnWidth(10, 8 * 256); sheet.setColumnWidth(11, 8 * 256); sheet.setColumnWidth(12, 8 * 256); sheet.setColumnWidth(13, 8 * 256); sheet.setColumnWidth(14, 8 * 256); sheet.setColumnWidth(15, 8 * 256); sheet.setColumnWidth(16, 8 * 256); sheet.setColumnWidth(17, 8 * 256); sheet.setColumnWidth(18, 8 * 256); sheet.setColumnWidth(19, 8 * 256); sheet.setColumnWidth(20, 8 * 256); sheet.setColumnWidth(21, 8 * 256); sheet.setColumnWidth(22, 8 * 256); sheet.setColumnWidth(23, 8 * 256); sheet.setColumnWidth(24, 8 * 256); for (int i = 0; i < micDataList.size(); i++) { writeChargeCell(sheet.createRow(i + 1), micDataList.get(i)); } } private void writeHeadCell(Row r, String... vs) { for (int i = 0; i < vs.length; i++) { r.createCell(i).setCellValue(vs[i]); } } private void writeChargeCell(Row r, MicData micData) { int cellIndex = 0; r.createCell(cellIndex++).setCellValue(micData.getLineNo()); r.createCell(cellIndex++).setCellValue(micData.getCreateTime()); r.createCell(cellIndex++).setCellValue(micData.getCreateName()); r.createCell(cellIndex++).setCellValue(micData.getNumber()); r.createCell(cellIndex++).setCellValue(micData.getRodNo()); r.createCell(cellIndex++).setCellValue(micData.getMic1Max()); r.createCell(cellIndex++).setCellValue(micData.getMic1Min()); r.createCell(cellIndex++).setCellValue(micData.getMic2Max()); r.createCell(cellIndex++).setCellValue(micData.getMic2Min()); r.createCell(cellIndex++).setCellValue(micData.getMic3Max()); r.createCell(cellIndex++).setCellValue(micData.getMic3Min()); r.createCell(cellIndex++).setCellValue(micData.getMic4Max()); r.createCell(cellIndex++).setCellValue(micData.getMic4Min()); r.createCell(cellIndex++).setCellValue(micData.getMic5Max()); r.createCell(cellIndex++).setCellValue(micData.getMic5Min()); r.createCell(cellIndex++).setCellValue(micData.getMic6Max()); r.createCell(cellIndex++).setCellValue(micData.getMic6Min()); r.createCell(cellIndex++).setCellValue(micData.getMic7Max()); r.createCell(cellIndex++).setCellValue(micData.getMic7Min()); r.createCell(cellIndex++).setCellValue(micData.getMic8Max()); r.createCell(cellIndex++).setCellValue(micData.getMic8Min()); r.createCell(cellIndex++).setCellValue(micData.getMic9Max()); r.createCell(cellIndex++).setCellValue(micData.getMic9Min()); }
3.前端接管
function derVice(){ $.ajax({ headers: { 'content-type':'application/json;charset=ISO8859-1' }, type: "GET", url: "api/export", xhrFields: { responseType: "arraybuffer", }, success: function (res, _, xhr) { console.log(res); let [, fileName] = xhr .getResponseHeader("Content-Disposition") .match(/filename=(.*)$/); let blob = new Blob([res], { type: "application/vnd.ms-excel", }); let link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); link.download = fileName; link.click(); window.URL.revokeObjectURL(link.href); }, }); }