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.[超详细]

如何通过java代码将access数据库表中的数据导出生成excel格式的文件,谢谢各位。

如何将查询结果导出到Excel文件?

poi导出Excel的奇怪问题

POI+EL利用模板将图片导出到excel怎么写?

JAVA poi 数据库表里的内容输出到Excel表格指定位置