EasyExcel的导入和导出
導入:
下面是從http請求流中讀取數據流,其他形式的數據流道理相同;
邏輯代碼:
@PostMapping(value = "import", consumes = "multipart/*", headers = "content-type=multipart/form-data")public String import(MultipartHttpServletRequest request) {log.info("import批量錄入數據開始");String fileName="";try {Map<String, MultipartFile> fileMap = request.getFileMap();for (Map.Entry<String, MultipartFile> part : fileMap.entrySet()) {InputStream inputStream = part.getValue().getInputStream();fileName=part.getValue().getOriginalFilename();Boolean isExcel = FileUtil.isExcelFile(fileName);//就是判斷下擴展名是不是xls、xlsx;if (!isExcel) {throw new ValidateException("導入的文件不是excel文件");}List<Data> data = new LinkedList<>();EasyExcel.read(inputStream).head(Data.class).autoTrim(true).registerReadListener(new AnalysisEventListener<ByteArea>() {@Overridepublic void invoke(Data data1, AnalysisContext analysisContext) {data.add(data1);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("讀取文件[{}]成功,一共:{}行......", part.getKey(), data.size());}}).doReadAll();//讀取所有的sheet;importService.import(data);}} catch (Exception e) {log.error("批量錄入數據異常", e);return "批量錄入數據異常";}return "批量錄入數據正常";}類的屬性注解中的value要和Excel列頭的名字相同,保證Excel數據可以映射到對象的屬性中:
導出相關常用API
注解ExcelProperty 指定寫到第幾列,默認根據成員變量排序。value指定寫入的名稱,默認成員變量的名字。ExcelIgnore 默認所有字段都會寫入excel,這個注解會忽略這個字段。DateTimeFormat 日期轉換,將Date寫到excel會調用這個注解。里面的value參照java.text.SimpleDateFormat。NumberFormat 數字轉換,用Number寫excel會調用這個注解。里面的value參照java.text.DecimalFormat。
EasyExcel相關參數needHead 監聽器是否導出頭。useDefaultStyle 寫的時候是否是使用默認頭。head 與clazz二選一。寫入文件的頭列表,建議使用class。autoTrim 字符串、表頭等數據自動trim。sheetNo 需要寫入的編碼。默認0。sheetName 需要些的Sheet名稱,默認同sheetNo。
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class Data implements Serializable {/*** 區域id*/@ExcelProperty("areaCode")private String areaCode;/*** 區域名稱*/@ExcelProperty("areaName")private String areaName;/*** 父級id*/@ExcelProperty("fatherId")private String fatherId;/*** 級別*/@ExcelProperty("level")private Integer level; }POM依賴引入:
<properties><easyExcel.version>2.2.6</easyExcel.version> </properties> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyExcel.version}</version> </dependency>導出:
下面是導出的核心部分代碼,可根據實際場景進行調整代碼
ByteArrayOutputStream os = new ByteArrayOutputStream(); ExcelWriter excelWriter = EasyExcel.write(os).build(); WriteSheet writeSheet = EasyExcel.writerSheet("第" + (i - 1) + "部分").build(); excelWriter.write(page.getResult(), writeSheet); excelWriter.finish(); os.close();總結
可以看出不管是excel的讀取還是寫入,都是一個注解加上一行代碼完成,可以讓我們少些很多解析的代碼,極大減少了重復的工作量。當然這兩個例子使用了最簡單的方式,EasyExcel還支持更多場景,例如讀,可以讀多個sheet,也可以解析一行數據或者多行數據做一次入庫操作;寫的話,支持復雜頭,指定列寫入,重復多次寫入,多個sheet寫入,根據模板寫入等等。更多的例子可以去參考EasyExcel官方文檔https://www.yuque.com/easyexcel/doc/easyexcel
總結
以上是生活随笔為你收集整理的EasyExcel的导入和导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于计算机专业励志的话,电脑行业励志语录
- 下一篇: 计算机视觉论文-2021-07-13