架構SSM + Maven
一、添加依賴:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.11</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.11</version> </dependency>
二、controller層導出:
(1)HSSFWorkbook工具類(導出.xls格式文件)
HSSFWorkbook對象,最多支持65535行,適用一般數據量少導出
@RequestMapping(value = "/exportExcel") public void exportallCusTNList(HttpServletRequest request,HttpServletResponse response) { String clSchWorkID = request.getParameter("clSchWorkID"); // 創建excel Workbook wb = new HSSFWorkbook(); try { List<Cllog> cllogList = cllogService.getCusTNListBySchWorkId(clSchWorkID); // 創建一張工作表 HSSFSheet sheet = wb.createSheet("sheet1"); // 設置單元格寬度 sheet.setColumnWidth(0, "列名".getBytes().length*2*256); sheet.setColumnWidth(1, "列名".getBytes().length*2*256); // 創建第一行 HSSFRow row = sheet.createRow(0); // 創建第一行的列並向單元格寫值 HSSFCell cell = row.createCell(0); cell.setCellValue("序列號"); cell = row.createCell(1); cell.setCellValue("手機型號"); // 寫入數據 for (short i=0;i<cllogList.size();i++) { row = sheet.createRow(i+1); row.createCell(0).setCellValue(String.valueOf(i+1)); row.createCell(1).setCellValue(cllogList.get(i).getClCustn()); } // 文件名 String fileName = "序列號" + clSchWorkID + "手機清單.xls"; // 解決文件亂碼 final String userAgent = request.getHeader("user-agent"); if (userAgent != null && userAgent.indexOf("Firefox") >= 0) { fileName = new String(fileName.getBytes(), "ISO8859-1"); } else { fileName = URLEncoder.encode(fileName, "UTF8"); } // 下載文件 response.setContentType("application/octet-stream"); response.setHeader("Content-disposition", "attachment;filename="+fileName); response.flushBuffer(); wb.write(response.getOutputStream()); } catch (Exception e) { e.printStackTrace(); } finally { if(wb != null) { try { wb.close(); } catch (IOException e) { e.printStackTrace(); } } } }
如果用HSSFWorkbook對象創建xlsx對象,用WPS可以打開,但是用office打開會出現如下錯誤:
(2)SXSSFWorkbook工具類(導出.xlsx格式文件,適用於數據量大的文件導出)
SXSSFWorkbook對象,只支持.xlsx格式。它就是用來解決大數據量以及超大數據量的導入導出操作的,單個sheet表就支持近104萬條數據了。要是導出104萬以上的數據,這時我們必須拆分到多個工作表來實現
// 只添加跟HSSFWorkBook不一樣的代碼 // 創建excel Workbook wb = new SXSSFWorkbook() // 創建一張工作表 Sheet sheet = wb.createSheet("sheet1"); // 設置單元格寬度 sheet.setColumnWidth(0, "列名".getBytes().length*2*256); sheet.setColumnWidth(1, "列名".getBytes().length*2*256); // 創建第一行 Row row = sheet.createRow(0); // 創建第一行的列並向單元格寫值 Cell cell = row.createCell(0); // 文件名 String fileName = "序列號" + clSchWorkID + "手機清單.xlsx";
參考文章:https://www.cnblogs.com/Big-Boss/p/10002739.html
參考文章:https://blog.csdn.net/a602049511/article/details/52367563/
——與君共勉