【EasyExcel】的一些用法
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
一、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());
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df
Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io`
3 个月前
更多推荐
已为社区贡献8条内容
所有评论(0)