一、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可以在调用方法时排除不同的数据列。文章来源:https://www.toymoban.com/news/detail-689948.html
EasyExcel.write(fileName, UserData.class).sheet("学生信息表").excludeColumnFiledNames(Arrays.asList("remark")).doWrite(getData());
参考链接:https://jsnds.cn/2021/07/29/104400.html文章来源地址https://www.toymoban.com/news/detail-689948.html
到了这里,关于【EasyExcel】的一些用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!