Java POI将数据库表查询结果导出到Excel实现及乱码问题
Posted 夏天换上冬装
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java POI将数据库表查询结果导出到Excel实现及乱码问题相关的知识,希望对你有一定的参考价值。
使用java 的PO实现将从数据库查询的结果,导入到excel文件,并返回到页面下载链接。
依赖:
1 <dependency> 2 <groupId>org.apache.poi</groupId> 3 <artifactId>poi</artifactId> 4 <version>3.15</version> 5 </dependency>
代码:
ResultSet rs为数据库查询结果
1 public void write2excel(HttpServletResponse response,HttpServletRequest request, ResultSet rs, String fileName) 2 throws SQLException, IOException { 3 //创建HSSFWorkbook,一个HSSFWorkbook对应一个Excel文件 4 HSSFWorkbook wb = new HSSFWorkbook(); 5 //在workbook中添加一个sheet,对应Excel文件中的sheet 6 HSSFSheet sheet = wb.createSheet("sheet"); 7 //创建第一行 8 HSSFRow row = sheet.createRow(0); 9 HSSFCell cell; 10 // 将列名写入 11 for (int j = 0; j < rs.getMetaData().getColumnCount(); j++) { 12 String columnName = rs.getMetaData().getColumnLabel(j + 1); 13 // 给列写入数据,创建单元格,写入数据 14 cell = row.createCell(j); 15 cell.setCellValue(columnName); 16 17 } 18 19 // 写入正式数据 20 int i = 0; 21 while (rs.next()) { 22 row = sheet.createRow(i + 1); 23 for (int j = 0; j < rs.getMetaData().getColumnCount(); j++) { 24 String columnValue = rs.getString(j + 1); 25 row.createCell(j).setCellValue(columnValue); 26 } 27 ++i; 28 } 29 //上面的操作已经是生成一个完整的文件了,只需要将生成的流转换成文件即可 30 ServletOutputStream outputStream = null; 31 32 33 //配置header 34 // attachment这个代表要下载的,如果去掉就直接打开了(attachment-作为附件下载,inline-在线打开) 35 // filename是文件名,另存为或者下载时,为默认的文件名 36 String agent = request.getHeader("USER-AGENT").toLowerCase(); 37 response.reset(); 38 39 //下面开始到try之前主要为解决excel乱码问题 40 response.setContentType("multipart/form-data"); 41 response.setCharacterEncoding("utf-8"); 42 43 //火狐浏览器 44 if (agent.contains("firefox")) { 45 fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1"); 46 } else { 47 fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); 48 } 49 50 response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); 51 52 try{ 53 //生成response传输流,若是传输到本地则需创建FileOutputStream 54 outputStream = response.getOutputStream(); 55 wb.write(outputStream); 56 }catch (Exception e){ 57 e.printStackTrace(); 58 }finally { 59 outputStream.flush(); 60 outputStream.close(); 61 62 } 63 64 }
tips:
此外在开发中踩到的坑还有:在使用swagger调试接口的时候,下载导出文件excel到页面时,会乱码,但使用url加上参数(swagger接口下面有写好的了)则导出到页面的链接下载文件后能正常显示,不乱码。
以上是关于Java POI将数据库表查询结果导出到Excel实现及乱码问题的主要内容,如果未能解决你的问题,请参考以下文章
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.[超详细]