当前位置:Gxlcms > 数据库问题 > Java POI将数据库表查询结果导出到Excel实现及乱码问题

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

时间:2021-07-01 10:21:17 帮助过:14人阅读

<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   

人气教程排行