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