EasyExcel介绍
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。反正他提供的案例:64M内存20秒读取75M(46W行25列)的Excel。
EasyExcel相关链接
EasyExcel官网:https://easyexcel.opensource.alibaba.com/
EasyExcel 文档地址:https://easyexcel.opensource.alibaba.com/docs/current/
EasyExcel Github地址:https://github.com/alibaba/easyexcel
EasyExcel上手Demo
Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.2</version>
</dependency>
读、写案例代码参考
伪代码
try {
// 这里URLEncoder.encode可以防止中文乱码
String fName = URLEncoder.encode("表格文件名" + DateUtil.format(new Date(), "yyyy-MM-dd"), "UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fName + ".xlsx");
EasyExcel.write(response.getOutputStream(), 导出那个对象的数据.class)
.sheet("sheet名称")
.registerConverter(new LongStringConverter())
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20))
.doWrite(数据集合);
} catch (IOException e) {
log.error("导出的数据.", e);
throw new RuntimeException();
}
EasyExcel相关注解
设置单元格的长、宽
@ColumnWidth(25) 可以直接注解在类上,也可使用字段上
示例:
@ExcelProperty(value = {"最后走访时间"}, index = 10)
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ColumnWidth(40)
private Date roomLastVisitTime;
时间格式处理
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
自定义事件格式转换@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
不过注意哦Excel时间这一栏过长,就容易变成 #########,鼠标点击#才能正常展示。要不设置cell长度?
@ExcelProperty(value = {"最后走访时间"})
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
private Date roomLastVisitTime;
// 导出的Excel
浮点型数据处理
@NumberFormat("#.##%")
@ExcelProperty(value = "数字标题")
private Double doubleData;
字段不导出 @ExcelIgnore
从名字我们就应该能看出来Ignore就是忽略的意思。
忽略这个字段在导出Excel的作用!
@ExcelProperty()
@ExcelProperty({"房屋主键"})
private Integer id;
自定义转换器 Converter
如果导出的结果是空白,一定要注意检查到处对象是不是空!
如果导出的结果是空白,一定要注意检查到处对象是不是空!
如果导出的结果是空白,一定要注意检查到处对象是不是空!
不得使用内部类!单独放一个新的类中。不然会报错,你百度搜不的报错!
注意使用自定义Convert。如果输入在Java对象写入到Excel过程中,Java对象属性是null,则不会触发Convret执行哦!所以如果你需要你的对象在写入Excel过程中走了自定义转换器,一定要校验一下属性是否为空哦!
// 定义转换的内容。Convert<T>中的T一定要与你写入Excle的泛型保持一致,不然会报错
public class AddressTypeConverter implements Converter<String> {
@Override
public Class<?> supportJavaTypeKey() {
// 定义Java转换类型
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
// 写入到Excel的格式
return CellDataTypeEnum.STRING;
}
// 将Excel数据转为Java属性
@Override
public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return "自定义" + Converter.super.convertToJavaData(cellData, contentProperty, globalConfiguration);
}
// Java对象写入到Excel的数据,其中我们的Java对象值是在context的value属性
@Override
public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) throws Exception {
if (StringUtils.equals("0", context.getValue())) {
return new WriteCellData<>("非标准地址");
} else if (StringUtils.equals("1", context.getValue())) {
return new WriteCellData<>("标准地址");
} else {
return new WriteCellData<>("未知");
}
}
}
使用Convert
@Schema(description = "地址类型 0=非标准地址 1=标准地址")
@ExcelProperty(value = {"地址类型"}, converter = AddressTypeConverter.class, index = 3)
private String roomAddressType;
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)