java用POI导出Excel
架构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/
——与君共勉