【EasyExcel】的一些用法 末蓝、 2023-09-23 22:11 78阅读 0赞 ### 一、AnalysisEventListener监听类,可以用来解析Excel ### 用来进行监听,一方面,它可以处理空数据的检查,重复数据的检查等一些数据筛查工作。另一方面,也可以做数据的存储,如果在此做数据存储,那么数据的转换也是可以在这里完成的。 在该监听器中,通过重写AnalysisEventListener的方法来获得解析的数据、表头信息,以及解析完毕之后执行的操作信息。 public class ExcelListener extends AnalysisEventListener<UserData> { /** * 一行一行的读取excel内容 */ public void invoke(UserData data, AnalysisContext analysisContext) { System.out.println("****" + data); } /** * 读取表头内容 */ public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { System.out.println("表头" + headMap); } /** * 读取完成操作 */ public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("读取Excel完毕"); } } 调用: public class EasyExcelReadDemo { public static void main(String[] args) { // 实现excel写操作 //1.设置写入文件夹地址和excel文件名称 String fileName = "/Users/zzs/temp/excel/write.xlsx"; //调用easyExcel里面的方法实现写操作 //2个参数,第一个参数是文件名称,第二个参数是实体类 EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead(); } } ### 二、自定义转化器 ### 通过自定义转换器,比如将1、0转换成男、女的实例: public class SexConverter implements Converter<Integer> { public Class<Integer> supportJavaTypeKey() { return Integer.class; } public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { return "男".equals(cellData.getStringValue()) ? 1 : 0; } public CellData<String> convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { return new CellData<>(integer.equals(1) ? "男" : "女"); } } 使用: @ExcelProperty(value="性别",converter = SexConverter.class) private Integer sex; 再次生成Excel,性别字段内容便显示为:男、女字样。 ### 三、保留两位小数 ### 比如体重需要保留两位小数,可通过@NumberFormat 注解实现: @ExcelProperty(value = "体重KG") @NumberFormat("0.##") // 会以字符串形式生成单元格,要计算的列不推荐 private BigDecimal weight; 另外一种方法是使用@ContentStyle注解:这样也能达到保留两位小数的效果。 当然,也可以使用实现Converter接口的方式实现(同性别实现)。 @ContentStyle(dataFormat = 2) private BigDecimal weight2; ### 四、排除指定Excel列 ### 在很多场景下,Excel的列与实体类可能并不完全一致,这时就需要排除一些实体类的字段。 **方式一:类上加注解 @ExcelIgnoreUnannotated,过滤属性没有@ExcelProperty注解的字段** @Data @ToString @AllArgsConstructor @NoArgsConstructor // 一定要有无参构造方法 @ExcelIgnoreUnannotated public class UserData { ..... } **方式二:指定字段加@ExcelIgnore注解** @ExcelIgnore // 该字段不生成excel private String remark; **方式三:代码指定过滤字段,通过excludeColumnFiledNames方法,这种方法的好处是:同一Excel可以在调用方法时排除不同的数据列。** EasyExcel.write(fileName, UserData.class).sheet("学生信息表").excludeColumnFiledNames(Arrays.asList("remark")).doWrite(getData()); 参考链接:[https://jsnds.cn/2021/07/29/104400.html][https_jsnds.cn_2021_07_29_104400.html] [https_jsnds.cn_2021_07_29_104400.html]: https://jsnds.cn/2021/07/29/104400.html
还没有评论,来说两句吧...