JAVA POI导出excel

简介:

1.引入maven 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi</artifactId>
             <version>${poi.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
             <version>${poi.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>${poi.version}</version>
         </dependency>

  

2.工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
public  class  ExcelUtils {
     /**
      * @param response
      * @param fileName excel文件名
      * @param headMap  表头map
      * @param dataList 表格数据
      */
     public  static  void  exportXlsx(HttpServletResponse response, String fileName,
                                   Map<String, String> headMap, List<Map<String, Object>> dataList) {
 
         Workbook workbook = exportXlsx(fileName, headMap, dataList);
         response.setContentType( "application/binary;charset=ISO8859_1" );
 
         OutputStream outputStream =  null ;
 
         try  {
             outputStream = response.getOutputStream();
             String fn =  new  String(fileName.getBytes(),  "ISO8859_1" );
             response.setHeader( "Content-disposition" "attachment; filename="  + fn +  ".xlsx" );
             workbook.write(outputStream);
         catch  (Exception e) {
             e.printStackTrace();
         finally  {
             if  (outputStream !=  null ) {
                 try  {
                     outputStream.close();
                 catch  (IOException e) {
                     e.printStackTrace();
                 }
             }
         }
 
     }
 
     /**
      * 导出数据
      *
      * @param headMap
      * @param dataList
      */
     public  static  Workbook exportXlsx(String sheetName, Map<String, String> headMap, List<Map<String, Object>> dataList) {
 
         Workbook workbook =  new  XSSFWorkbook();
 
         Sheet sheet = workbook.createSheet(sheetName);
 
 
         int  rowIndex =  0 , columnIndex =  0 ;
         Set<String> keys = headMap.keySet();
 
         //表头
         Row row = sheet.createRow(rowIndex++);
         for  (String key : keys) {
             Cell cell = row.createCell(columnIndex++);
             cell.setCellValue(headMap.get(key));
         }
 
         //内容
         if  (dataList !=  null  && !dataList.isEmpty()) {
             for  (Map<String, Object> map : dataList) {
                 row = sheet.createRow(rowIndex++);
                 columnIndex =  0 ;
                 for  (String key : keys) {
                     Cell cell = row.createCell(columnIndex++);
                     setCellValue(cell, map.get(key));
                 }
             }
         }
 
         return  workbook;
     }
 
     private  static  void  setCellValue(Cell cell, Object obj) {
         if  (obj ==  null ) {
             return ;
         }
         if  (obj  instanceof  String) {
             cell.setCellValue((String) obj);
         else  if  (obj  instanceof  Date) {
             Date date = (Date) obj;
             if  (date !=  null ) {
                 cell.setCellValue(DateUtils.dfDateTime.format(date));
             }
         else  if  (obj  instanceof  Calendar) {
             Calendar calendar = (Calendar) obj;
             if  (calendar !=  null ) {
                 cell.setCellValue(DateUtils.dfDateTime.format(calendar.getTime()));
             }
         else  if  (obj  instanceof  Timestamp) {
             Timestamp timestamp = (Timestamp) obj;
             if  (timestamp !=  null ) {
                 cell.setCellValue(DateUtils.dfDateTime.format( new  Date(timestamp.getTime())));
             }
         else  if  (obj  instanceof  Double) {
             cell.setCellValue((Double) obj);
         else  {
             cell.setCellValue(obj.toString());
         }
     }
}

  3.controller导出用户数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@RequestMapping ( "/export" )
     public  String export(String username, HttpServletRequest request, HttpServletResponse repsonse) {
         //查询用户数据
         UserQueryDTO queryDTO =  new  UserQueryDTO() {{
             setUsername(username);
         }};
         List<CmsUser> userList = userService.findUser(queryDTO);
 
         //表头
         Map<String, String> headNameMap =  new  LinkedHashMap<String, String>();
         headNameMap.put( "userId" "ID" );
         headNameMap.put( "roleName" "角色" );
         headNameMap.put( "userName" "账号" );
         headNameMap.put( "realName" "姓名" );
         headNameMap.put( "mobile" "电话号码" );
         headNameMap.put( "createDate" "创建时间" );
         headNameMap.put( "status" "状态" );
 
         //表格数据
         List<Map<String, Object>> list =  new  ArrayList<Map<String, Object>>();
         if  (userList !=  null  && userList.size() >  0 ) {
             for  (CmsUser user : userList) {
                 String statusName =  "正常" ;
                 if  (StringUtils.isNotBlank(user.getDeleteFlag()) && user.getDeleteFlag().equals(ConstantHelper.DELETE_FLAG_DELETED)) {
                     statusName =  "删除" ;
                 }
 
                 String createDate =  "" ;
                 if  (user.getCreateDate() !=  null ) {
                     createDate =  new  SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format(user.getCreateDate());
                 }
 
                 String roleName =  "" ;
                 Set<CmsRole> roleSet = roleService.findByUserId(user.getUserId());
                 if  (roleSet !=  null  && roleSet.size() >  0 ) {
                     for  (CmsRole r : roleSet) {
                         roleName += r.getName() +  " " ;
                     }
                 }
 
                 Map<String, Object> map =  new  HashMap<String, Object>();
                 map.put( "userId" , user.getUserId());
                 map.put( "roleName" , roleName);
                 map.put( "userName" , user.getUsername());
                 map.put( "realName" , user.getRealName());
                 map.put( "mobile" , user.getMobile());
                 map.put( "createDate" , createDate);
                 map.put( "status" , statusName);
                 list.add(map);
             }
         }
 
         ExcelUtils.exportXlsx(repsonse,  "用户" , headNameMap, list);
         return  null ;
     }

  

 


    本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/p/7596637.html,如需转载请自行联系原作者


相关文章
|
1月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
1月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
1月前
|
easyexcel Java 测试技术
读取Excel还用POI?试试这款开源工具EasyExcel
读取Excel还用POI?试试这款开源工具EasyExcel
55 0
|
5天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
18 0
|
5天前
|
数据库
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法
|
5天前
|
前端开发
开发指南007-导出Excel
平台上开发导出Excel比过去的单体架构要复杂些,因为前端和后台不在一个进程空间里。
|
1月前
|
SQL Java easyexcel
【Java】百万数据excel导出功能如何实现
【Java】百万数据excel导出功能如何实现
130 0
|
Java 数据处理 数据库
重构:以Java POI 导出EXCEL为例2
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数。这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等。 上一篇博文地址:http://www.cnblogs.
1242 0
|
Java C# C++
重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是《重构:改善既有代码的设计》这本书第2章的问题。 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的了解重构的意义。
1353 0
|
1天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
12 0