javascript
Spring Boot + EasyExcel 导入导出,好用到爆!
今日推薦
Java 8 一行代碼解決了空指針問題,太厲害了...List中remove()方法的陷阱,被坑慘了!25000 字詳解 23 種設計模式,原來可以這么簡單!最牛逼的 Java 日志框架,性能無敵,橫掃所有對手.....這玩意比ThreadLocal叼多了,嚇得我趕緊分享出來。來源:www.jianshu.com/p/4e6aa6342b33
EasyExcel是阿里巴巴開源poi插件之一,主要解決了poi框架使用復雜,sax解析模式不容易操作,數據量大起來容易OOM,解決了POI并發造成的報錯。主要解決方式:通過解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數據,降低內存的占用。
EasyExcel優勢
注解式自定義操作。
輸入輸出簡單,提供輸入輸出過程的接口
支持一定程度的單元格合并等靈活化操作
二、常用注解
@ExcelProperty 指定當前字段對應excel中的那一列。可以根據名字或者Index去匹配。當然也可以不寫,默認第一個字段就是index=0,以此類推。千萬注意,要么全部不寫,要么全部用index,要么全部用名字去匹配。千萬別三個混著用,除非你非常了解源代碼中三個混著用怎么去排序的。
@ExcelIgnore 默認所有字段都會和excel去匹配,加了這個注解會忽略該字段
@DateTimeFormat 日期轉換,用String去接收excel日期格式的數據會調用這個注解。里面的value參照java.text.SimpleDateFormat
@NumberFormat 數字轉換,用String去接收excel數字格式的數據會調用這個注解。里面的value參照java.text.DecimalFormat
@ExcelIgnoreUnannotated默認不加ExcelProperty 的注解的都會參與讀寫,加了不會參與
三、依賴
<!--?easyexcel?主要依賴??這一個基本上就夠了--> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.4</version> </dependency><!--?servlet-api?--> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version> </dependency>四、監聽
/***?EasyExcel?導入監聽*/ public?class?ExcelListener?extends?AnalysisEventListener?{//可以通過實例獲取該值private?List<Object>?datas?=?new?ArrayList<Object>();@Overridepublic?void?invoke(Object?o,?AnalysisContext?analysisContext)?{datas.add(o);//數據存儲到list,供批量處理,或后續自己業務邏輯處理。doSomething(o);//根據自己業務做處理}private?void?doSomething(Object?object)?{//1、入庫調用接口}public?List<Object>?getDatas()?{return?datas;}public?void?setDatas(List<Object>?datas)?{this.datas?=?datas;}@Overridepublic?void?doAfterAllAnalysed(AnalysisContext?analysisContext)?{//?datas.clear();//解析結束銷毀不用的資源} }五、接口導入Excel
try?{//獲取文件名String?filename?=?file.getOriginalFilename();//獲取文件流InputStream?inputStream?=?file.getInputStream();//實例化實現了AnalysisEventListener接口的類ExcelListener?listener?=?new?ExcelListener();//傳入參數ExcelReader?excelReader?=?new?ExcelReader(inputStream,?ExcelTypeEnum.XLS,?null,?listener);//讀取信息excelReader.read(new?Sheet(1,?0,?Test.class));//獲取數據List<Object>?list?=?listener.getDatas();if?(list.size()?>?1)?{for?(int?i?=?0;?i?<?list.size();?i++)?{Testobj?=?(Test)?list.get(i);JSONObject?jo?=?new?JSONObject();}}}?catch?(Exception?e)?{System.out.println(e.getMessage());}六、接口導出Excel (HttpServletResponse response, HttpServletRequest request)
try?{String?filenames?=?"111111";String?userAgent?=?request.getHeader("User-Agent");if?(userAgent.contains("MSIE")?||?userAgent.contains("Trident"))?{filenames?=?URLEncoder.encode(filenames,?"UTF-8");}?else?{filenames?=?new?String(filenames.getBytes("UTF-8"),?"ISO-8859-1");}response.setContentType("application/vnd.ms-exce");response.setCharacterEncoding("utf-8");response.addHeader("Content-Disposition",?"filename="?+?filenames?+?".xlsx");EasyExcel.write(response.getOutputStream(),?Test.class).sheet("sheet").doWrite(testList); }?catch?(Exception?e)?{ }七、本地導入、本地導出
List<Test>?testList?=?new?ArrayList<>(); try?{String?strUrl?=?"C:\\Users\\Administrator\\Desktop\\json.xlsx";File?multipartFile?=?new?File(strUrl);InputStream?inputStream?=?new?FileInputStream(multipartFile);//實例化實現了AnalysisEventListener接口的類ExcelListener?listener?=?new?ExcelListener();//傳入參數ExcelReader?excelReader?=?new?ExcelReader(inputStream,?ExcelTypeEnum.XLS,?null,?listener);//讀取信息excelReader.read(new?Sheet(1,?0,?Test.class));//獲取數據List<Object>?list?=?listener.getDatas();if?(list.size()?>?1)?{for?(int?i?=?0;?i?<?list.size();?i++)?{Testobj?=?(Test)?list.get(i);}} }?catch?(Exception?e)?{System.out.println(e.getMessage()); } try?{String?strUrl?=?"C:\\Users\\Administrator\\Desktop\\json"+System.currentTimeMillis()+".xlsx";EasyExcel.write(strUrl,Test.class).sheet("sheet").doWrite(testList); }?catch?(Exception?e)?{ }以上就是EasyExcel的基礎使用過程,歡迎點贊關注交流。
推薦文章1、一款高顏值的 SpringBoot+JPA 博客項目2、超優 Vue+Element+Spring 中后端解決方案3、推薦幾個支付項目!4、推薦一個 Java 企業信息化系統5、一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)總結
以上是生活随笔為你收集整理的Spring Boot + EasyExcel 导入导出,好用到爆!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 撑起12306网站,全靠这个世界第一的缓
- 下一篇: 400 多页的 Java 面试笔记,各个