码迷,mamicode.com
首页 > 数据库 > 详细

Java POI将数据库表查询结果导出到Excel实现及乱码问题

时间:2020-06-09 16:56:53      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:contain   实现   ase   xls   显示   value   ack   开发   filename   

使用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实现及乱码问题

标签:contain   实现   ase   xls   显示   value   ack   开发   filename   

原文地址:https://www.cnblogs.com/huangguoming/p/13073215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!