自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringBoot實現(xiàn)Excel導(dǎo)入導(dǎo)出,好用到爆,POI可以扔掉了!

開發(fā) 后端
今天給大家推薦一款非常好用的Excel導(dǎo)入導(dǎo)出工具EasyPoi,希望對大家有所幫助!

[[433269]]

EasyPoi簡介

用慣了SpringBoot的朋友估計會想到,有沒有什么辦法可以直接定義好需要導(dǎo)出的數(shù)據(jù)對象,然后添加幾個注解,直接自動實現(xiàn)Excel導(dǎo)入導(dǎo)出功能?

EasyPoi正是這么一款工具,如果你不太熟悉POI,想簡單地實現(xiàn)Excel操作,用它就對了!

EasyPoi的目標(biāo)不是替代POI,而是讓一個不懂導(dǎo)入導(dǎo)出的人也能快速使用POI完成Excel的各種操作,而不是看很多API才可以完成這樣的工作。

集成

在SpringBoot中集成EasyPoi非常簡單,只需添加如下一個依賴即可,真正的開箱即用! 

  1. <dependency>  
  2.     <groupId>cn.afterturn</groupId>  
  3.     <artifactId>easypoi-spring-boot-starter</artifactId>  
  4.     <version>4.4.0</version>  
  5. </dependency> 

使用

接下來介紹下EasyPoi的使用,以會員信息和訂單信息的導(dǎo)入導(dǎo)出為例,分別實現(xiàn)下簡單的單表導(dǎo)出和具有關(guān)聯(lián)信息的復(fù)雜導(dǎo)出。

簡單導(dǎo)出

我們以會員信息列表導(dǎo)出為例,使用EasyPoi來實現(xiàn)下導(dǎo)出功能,看看是不是夠簡單!

  • 首先創(chuàng)建一個會員對象Member,封裝會員信息; 
  1. /**  
  2.  * 購物會員  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Data  
  6. @EqualsAndHashCode(callSuper = false 
  7. public class Member {  
  8.     @Excel(name = "ID"width = 10 
  9.     private Long id;  
  10.     @Excel(name = "用戶名"width = 20needMerge = true 
  11.     private String username;  
  12.     private String password;  
  13.     @Excel(name = "昵稱"width = 20needMerge = true 
  14.     private String nickname; 
  15.     @Excel(name = "出生日期"width = 20format = "yyyy-MM-dd" 
  16.     private Date birthday;  
  17.     @Excel(name = "手機號"width = 20needMerge = truedesensitizationRule = "3_4" 
  18.     private String phone;  
  19.     private String icon;  
  20.     @Excel(name = "性別"width = 10replace = {"男_0", "女_1"})  
  21.     private Integer gender;  
  •  在此我們就可以看到EasyPoi的核心注解@Excel,通過在對象上添加@Excel注解,可以將對象信息直接導(dǎo)出到Excel中去,下面對注解中的屬性做個介紹;
    •   name:Excel中的列名;
    •   width:指定列的寬度;
    •   needMerge:是否需要縱向合并單元格;
    •   format:當(dāng)屬性為時間類型時,設(shè)置時間的導(dǎo)出導(dǎo)出格式;
    •   desensitizationRule:數(shù)據(jù)脫敏處理,3_4表示只顯示字符串的前3位和后4位,其他為*號;
    •   replace:對屬性進行替換;
    •   suffix:對數(shù)據(jù)添加后綴。
  •  接下來我們在Controller中添加一個接口,用于導(dǎo)出會員列表到Excel,具體代碼如下; 
  1. /**  
  2.  * EasyPoi導(dǎo)入導(dǎo)出測試Controller  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Controller  
  6. @Api(tags = "EasyPoiController"description = "EasyPoi導(dǎo)入導(dǎo)出測試" 
  7. @RequestMapping("/easyPoi")  
  8. public class EasyPoiController {  
  9.     @ApiOperation(value = "導(dǎo)出會員列表Excel" 
  10.     @RequestMapping(value = "/exportMemberList"method = RequestMethod.GET)  
  11.     public void exportMemberList(ModelMap map,  
  12.                                  HttpServletRequest request,  
  13.                                  HttpServletResponse response) {  
  14.         List<Member> memberList = LocalJsonUtil.getListFromJson("json/members.json", Member.class);  
  15.         ExportParams params = new ExportParams("會員列表", "會員列表", ExcelType.XSSF);  
  16.         map.put(NormalExcelConstants.DATA_LIST, memberList);  
  17.         map.put(NormalExcelConstants.CLASS, Member.class);  
  18.         map.put(NormalExcelConstants.PARAMS, params);  
  19.         map.put(NormalExcelConstants.FILE_NAME, "memberList");  
  20.         PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);  
  21.     }  
  •  LocalJsonUtil工具類,可以直接從resources目錄下獲取JSON數(shù)據(jù)并轉(zhuǎn)化為對象,例如此處使用的members.json;

  •  運行項目,直接通過Swagger訪問接口,注意在Swagger中訪問接口無法直接下載,需要點擊返回結(jié)果中的下載按鈕才行,訪問地址:http://localhost:8088/swagger-ui/

  •  下載完成后,查看下文件,一個標(biāo)準(zhǔn)的Excel文件已經(jīng)被導(dǎo)出了。

簡單導(dǎo)入

導(dǎo)入功能實現(xiàn)起來也非常簡單,下面以會員信息列表的導(dǎo)入為例。

  •  在Controller中添加會員信息導(dǎo)入的接口,這里需要注意的是使用@RequestPart注解修飾文件上傳參數(shù),否則在Swagger中就沒法顯示上傳按鈕了; 
  1. /**  
  2.  * EasyPoi導(dǎo)入導(dǎo)出測試Controller  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Controller  
  6. @Api(tags = "EasyPoiController"description = "EasyPoi導(dǎo)入導(dǎo)出測試" 
  7. @RequestMapping("/easyPoi")  
  8. public class EasyPoiController {  
  9.     @ApiOperation("從Excel導(dǎo)入會員列表")  
  10.     @RequestMapping(value = "/importMemberList"method = RequestMethod.POST)  
  11.     @ResponseBody  
  12.     public CommonResult importMemberList(@RequestPart("file") MultipartFile file) {  
  13.         ImportParams params = new ImportParams();  
  14.         params.setTitleRows(1);  
  15.         params.setHeadRows(1);  
  16.         try {  
  17.             List<Member> list = ExcelImportUtil.importExcel(  
  18.                     file.getInputStream(),  
  19.                     Member.class, params);  
  20.             return CommonResult.success(list);  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace(); 
  23.             return CommonResult.failed("導(dǎo)入失??!");  
  24.         }  
  25.     }  
  •  然后在Swagger中測試接口,選擇之前導(dǎo)出的Excel文件即可,導(dǎo)入成功后會返回解析到的數(shù)據(jù)。

復(fù)雜導(dǎo)出

當(dāng)然EasyPoi也可以實現(xiàn)更加復(fù)雜的Excel操作,比如導(dǎo)出一個嵌套了會員信息和商品信息的訂單列表,下面我們來實現(xiàn)下!

  •  首先添加商品對象Product,用于封裝商品信息; 
  1. /**  
  2.  * 商品  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Data  
  6. @EqualsAndHashCode(callSuper = false 
  7. public class Product {  
  8.     @Excel(name = "ID"width = 10 
  9.     private Long id;  
  10.     @Excel(name = "商品SN"width = 20 
  11.     private String productSn;  
  12.     @Excel(name = "商品名稱"width = 20 
  13.     private String name;  
  14.     @Excel(name = "商品副標(biāo)題"width = 30 
  15.     private String subTitle;  
  16.     @Excel(name = "品牌名稱"width = 20 
  17.     private String brandName; 
  18.     @Excel(name = "商品價格"width = 10 
  19.     private BigDecimal price;  
  20.     @Excel(name = "購買數(shù)量"width = 10suffix = "件" 
  21.     private Integer count;  
  •  然后添加訂單對象Order,訂單和會員是一對一關(guān)系,使用@ExcelEntity注解表示,訂單和商品是一對多關(guān)系,使用@ExcelCollection注解表示,Order就是我們需要導(dǎo)出的嵌套訂單數(shù)據(jù); 
  1. /**  
  2.  * 訂單  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Data  
  6. @EqualsAndHashCode(callSuper = false 
  7. public class Order {  
  8.     @Excel(name = "ID"width = 10,needMerge = true 
  9.     private Long id;  
  10.     @Excel(name = "訂單號"width = 20,needMerge = true 
  11.     private String orderSn; 
  12.     @Excel(name = "創(chuàng)建時間"width = 20format = "yyyy-MM-dd HH:mm:ss",needMerge = true 
  13.     private Date createTime;  
  14.     @Excel(name = "收貨地址"width = 20,needMerge = true )  
  15.     private String receiverAddress;  
  16.     @ExcelEntity(name = "會員信息" 
  17.     private Member member;  
  18.     @ExcelCollection(name = "商品列表" 
  19.     private List<Product> productList;  
  •  接下來在Controller中添加導(dǎo)出訂單列表的接口,由于有些會員信息我們不需要導(dǎo)出,可以調(diào)用ExportParams中的setExclusions方法排除掉; 
  1. /**  
  2.  * EasyPoi導(dǎo)入導(dǎo)出測試Controller  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Controller 
  6. @Api(tags = "EasyPoiController"description = "EasyPoi導(dǎo)入導(dǎo)出測試" 
  7. @RequestMapping("/easyPoi")  
  8. public class EasyPoiController {  
  9.     @ApiOperation(value = "導(dǎo)出訂單列表Excel" 
  10.     @RequestMapping(value = "/exportOrderList"method = RequestMethod.GET)  
  11.     public void exportOrderList(ModelMap map,  
  12.                                 HttpServletRequest request,  
  13.                                 HttpServletResponse response) {  
  14.         List<Order> orderList = getOrderList(); 
  15.         ExportParams params = new ExportParams("訂單列表", "訂單列表", ExcelType.XSSF);  
  16.         //導(dǎo)出時排除一些字段  
  17.         params.setExclusions(new String[]{"ID", "出生日期", "性別"});  
  18.         map.put(NormalExcelConstants.DATA_LIST, orderList);  
  19.         map.put(NormalExcelConstants.CLASS, Order.class);  
  20.         map.put(NormalExcelConstants.PARAMS, params);  
  21.         map.put(NormalExcelConstants.FILE_NAME, "orderList");  
  22.         PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);  
  23.     }  
  •  在Swagger中訪問接口測試,導(dǎo)出訂單列表對應(yīng)Excel;

  •  下載完成后,查看下文件,EasyPoi導(dǎo)出復(fù)雜的Excel也是很簡單的!

自定義處理

如果你想對導(dǎo)出字段進行一些自定義處理,EasyPoi也是支持的,比如在會員信息中,如果用戶沒有設(shè)置昵稱,我們添加下暫未設(shè)置信息。

  •  我們需要添加一個處理器繼承默認的ExcelDataHandlerDefaultImpl類,然后在exportHandler方法中實現(xiàn)自定義處理邏輯; 
  1. /**  
  2.  * 自定義字段處理  
  3.  * Created by macro on 2021/10/13.  
  4.  */  
  5. public class MemberExcelDataHandler extends ExcelDataHandlerDefaultImpl<Member> {  
  6.   @Override  
  7.   public Object exportHandler(Member obj, String name, Object value) {  
  8.     if("昵稱".equals(name)){  
  9.       String emptyValue = "暫未設(shè)置" 
  10.       if(value==null){  
  11.         return super.exportHandler(obj,name,emptyValue);  
  12.       }  
  13.       if(value instanceof String&&StrUtil.isBlank((String) value)){  
  14.         return super.exportHandler(obj,name,emptyValue);  
  15.       }  
  16.     } 
  17.     return super.exportHandler(obj, name, value);  
  18.   }  
  19.   @Override  
  20.   public Object importHandler(Member obj, String name, Object value) {  
  21.     return super.importHandler(obj, name, value);  
  22.   }  
  •  然后修改Controller中的接口,調(diào)用MemberExcelDataHandler處理器的setNeedHandlerFields設(shè)置需要自定義處理的字段,并調(diào)用ExportParams的setDataHandler設(shè)置自定義處理器; 
  1. /**  
  2.  * EasyPoi導(dǎo)入導(dǎo)出測試Controller  
  3.  * Created by macro on 2021/10/12.  
  4.  */  
  5. @Controller  
  6. @Api(tags = "EasyPoiController"description = "EasyPoi導(dǎo)入導(dǎo)出測試" 
  7. @RequestMapping("/easyPoi")  
  8. public class EasyPoiController {  
  9.     @ApiOperation(value = "導(dǎo)出會員列表Excel" 
  10.     @RequestMapping(value = "/exportMemberList"method = RequestMethod.GET)  
  11.     public void exportMemberList(ModelMap map,  
  12.                                  HttpServletRequest request,  
  13.                                  HttpServletResponse response) {  
  14.         List<Member> memberList = LocalJsonUtil.getListFromJson("json/members.json", Member.class);  
  15.         ExportParams params = new ExportParams("會員列表", "會員列表", ExcelType.XSSF);  
  16.         //對導(dǎo)出結(jié)果進行自定義處理  
  17.         MemberExcelDataHandler handler = new MemberExcelDataHandler();  
  18.         handler.setNeedHandlerFields(new String[]{"昵稱"});  
  19.         params.setDataHandler(handler);  
  20.         map.put(NormalExcelConstants.DATA_LIST, memberList); 
  21.         map.put(NormalExcelConstants.CLASS, Member.class);  
  22.         map.put(NormalExcelConstants.PARAMS, params);  
  23.         map.put(NormalExcelConstants.FILE_NAME, "memberList");  
  24.         PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);  
  25.     }  
  •  再次調(diào)用導(dǎo)出接口,我們可以發(fā)現(xiàn)昵稱已經(jīng)添加默認設(shè)置了。

總結(jié)

體驗了一波EasyPoi,它使用注解來操作Excel的方式確實非常好用。如果你想生成更為復(fù)雜的Excel的話,可以考慮下它的模板功能。 

 

責(zé)任編輯:龐桂玉 來源: Java編程
相關(guān)推薦

2020-10-24 13:30:32

Java代碼數(shù)據(jù)類型

2022-04-12 08:43:21

Python內(nèi)置模塊

2021-11-15 10:02:16

Python命令技巧

2023-04-26 00:34:36

Python技巧程序員

2022-02-24 10:48:01

Pycharm插件

2024-07-19 10:31:15

2022-07-17 11:45:39

微服務(wù)架構(gòu)

2025-02-14 09:30:42

2022-01-26 07:42:13

SpringBoot性能系統(tǒng)

2021-03-11 08:24:48

Javapoi數(shù)據(jù)脫敏

2019-11-24 23:12:30

Vim插件編輯器編程語言

2021-11-26 10:36:36

瀏覽器插件谷歌

2012-02-22 09:44:21

Java

2022-12-29 08:49:40

SpringBootExcel

2022-08-01 07:02:06

SpringEasyExcel場景

2019-08-02 14:45:22

阿里Java命令

2015-09-17 11:33:09

2017-08-16 17:00:19

2022-08-03 15:18:41

StopWatch代碼

2021-12-11 23:13:16

Python語言技巧
點贊
收藏

51CTO技術(shù)棧公眾號